Command-line signal handling for Windows
parent
c1d92d72e1
commit
61f2cc45c2
|
@ -75,10 +75,45 @@ void signal_handler_init(void)
|
|||
}
|
||||
|
||||
#else // _WIN32
|
||||
#include <signal.h>
|
||||
#include <windows.h>
|
||||
|
||||
BOOL WINAPI event_handler(DWORD sig)
|
||||
{
|
||||
switch(sig)
|
||||
{
|
||||
case CTRL_C_EVENT:
|
||||
case CTRL_CLOSE_EVENT:
|
||||
case CTRL_LOGOFF_EVENT:
|
||||
case CTRL_SHUTDOWN_EVENT:
|
||||
|
||||
if(g_killed == false)
|
||||
{
|
||||
dstream<<DTIME<<"INFO: event_handler(): "
|
||||
<<"Ctrl+C, Close Event, Logoff Event or Shutdown Event, shutting down."<<std::endl;
|
||||
dstream<<DTIME<<"INFO: event_handler(): "
|
||||
<<"Printing debug stacks"<<std::endl;
|
||||
debug_stacks_print();
|
||||
|
||||
g_killed = true;
|
||||
}
|
||||
else
|
||||
{
|
||||
(void)signal(SIGINT, SIG_DFL);
|
||||
}
|
||||
|
||||
break;
|
||||
case CTRL_BREAK_EVENT:
|
||||
break;
|
||||
}
|
||||
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
void signal_handler_init(void)
|
||||
{
|
||||
// No-op
|
||||
dstream<<"signal_handler_init()"<<std::endl;
|
||||
SetConsoleCtrlHandler( (PHANDLER_ROUTINE)event_handler,TRUE);
|
||||
}
|
||||
|
||||
#endif
|
||||
|
|
Loading…
Reference in New Issue