SpeedProg avatar SpeedProg committed 47914a6

Command-line signal handling for Windows

Comments (0)

Files changed (1)

 }
 
 #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
Tip: Filter by directory path e.g. /media app.js to search for public/media/app.js.
Tip: Use camelCasing e.g. ProjME to search for ProjectModifiedEvent.java.
Tip: Filter by extension type e.g. /repo .js to search for all .js files in the /repo directory.
Tip: Separate your search with spaces e.g. /ssh pom.xml to search for src/ssh/pom.xml.
Tip: Use ↑ and ↓ arrow keys to navigate and return to view the file.
Tip: You can also navigate files with Ctrl+j (next) and Ctrl+k (previous) and view the file with Ctrl+o.
Tip: You can also navigate files with Alt+j (next) and Alt+k (previous) and view the file with Alt+o.