Mercurial > hg > orthanc
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 |