Mercurial > hg > orthanc
diff Core/Toolbox.cpp @ 10:27e2bbc11200
Better signal handling
author | Administrator@jodogne-w01 |
---|---|
date | Fri, 20 Jul 2012 11:45:05 +0200 |
parents | 3a584803783e |
children | 1bc6327d1de3 |
line wrap: on
line diff
--- a/Core/Toolbox.cpp Fri Jul 20 11:00:49 2012 +0200 +++ b/Core/Toolbox.cpp Fri Jul 20 11:45:05 2012 +0200 @@ -32,20 +32,28 @@ #endif #if defined(__linux) +#include <signal.h> #include <unistd.h> #endif -#include <signal.h> namespace Palantir { static bool finish; +#if defined(_WIN32) + static BOOL WINAPI ConsoleControlHandler(DWORD dwCtrlType) + { + // http://msdn.microsoft.com/en-us/library/ms683242(v=vs.85).aspx + finish = true; + return true; + } +#else static void SignalHandler(int) { finish = true; } - +#endif void Toolbox::Sleep(uint32_t seconds) { @@ -72,9 +80,10 @@ void Toolbox::ServerBarrier() { +#if defined(_WIN32) + SetConsoleCtrlHandler(ConsoleControlHandler, true); +#else signal(SIGINT, SignalHandler); - -#if !defined(_WIN32) signal(SIGQUIT, SignalHandler); #endif @@ -84,9 +93,10 @@ USleep(100000); } +#if defined(_WIN32) + SetConsoleCtrlHandler(ConsoleControlHandler, false); +#else signal(SIGINT, NULL); - -#if !defined(_WIN32) signal(SIGQUIT, NULL); #endif }