Command-line signal handling for Windows
parent
c1d92d72e1
commit
61f2cc45c2
|
@ -75,10 +75,45 @@ void signal_handler_init(void)
|
||||||
}
|
}
|
||||||
|
|
||||||
#else // _WIN32
|
#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)
|
void signal_handler_init(void)
|
||||||
{
|
{
|
||||||
// No-op
|
dstream<<"signal_handler_init()"<<std::endl;
|
||||||
|
SetConsoleCtrlHandler( (PHANDLER_ROUTINE)event_handler,TRUE);
|
||||||
}
|
}
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
Loading…
Reference in New Issue