comparison 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
comparison
equal deleted inserted replaced
8:3a584803783e 10:27e2bbc11200
30 #if defined(_WIN32) 30 #if defined(_WIN32)
31 #include <windows.h> 31 #include <windows.h>
32 #endif 32 #endif
33 33
34 #if defined(__linux) 34 #if defined(__linux)
35 #include <signal.h>
35 #include <unistd.h> 36 #include <unistd.h>
36 #endif 37 #endif
37 38
38 #include <signal.h>
39 39
40 namespace Palantir 40 namespace Palantir
41 { 41 {
42 static bool finish; 42 static bool finish;
43 43
44 #if defined(_WIN32)
45 static BOOL WINAPI ConsoleControlHandler(DWORD dwCtrlType)
46 {
47 // http://msdn.microsoft.com/en-us/library/ms683242(v=vs.85).aspx
48 finish = true;
49 return true;
50 }
51 #else
44 static void SignalHandler(int) 52 static void SignalHandler(int)
45 { 53 {
46 finish = true; 54 finish = true;
47 } 55 }
48 56 #endif
49 57
50 void Toolbox::Sleep(uint32_t seconds) 58 void Toolbox::Sleep(uint32_t seconds)
51 { 59 {
52 #if defined(_WIN32) 60 #if defined(_WIN32)
53 ::Sleep(static_cast<DWORD>(seconds) * static_cast<DWORD>(1000)); 61 ::Sleep(static_cast<DWORD>(seconds) * static_cast<DWORD>(1000));
70 } 78 }
71 79
72 80
73 void Toolbox::ServerBarrier() 81 void Toolbox::ServerBarrier()
74 { 82 {
83 #if defined(_WIN32)
84 SetConsoleCtrlHandler(ConsoleControlHandler, true);
85 #else
75 signal(SIGINT, SignalHandler); 86 signal(SIGINT, SignalHandler);
76
77 #if !defined(_WIN32)
78 signal(SIGQUIT, SignalHandler); 87 signal(SIGQUIT, SignalHandler);
79 #endif 88 #endif
80 89
81 finish = false; 90 finish = false;
82 while (!finish) 91 while (!finish)
83 { 92 {
84 USleep(100000); 93 USleep(100000);
85 } 94 }
86 95
96 #if defined(_WIN32)
97 SetConsoleCtrlHandler(ConsoleControlHandler, false);
98 #else
87 signal(SIGINT, NULL); 99 signal(SIGINT, NULL);
88
89 #if !defined(_WIN32)
90 signal(SIGQUIT, NULL); 100 signal(SIGQUIT, NULL);
91 #endif 101 #endif
92 } 102 }
93 103
94 104