Command-line signal handling for Windows

master
Constantin Wenger 2011-11-06 15:17:18 +01:00 committed by Perttu Ahola
parent c1d92d72e1
commit 61f2cc45c2
1 changed files with 36 additions and 1 deletions

View File

@ -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