Mercurial > hg > orthanc-webviewer
comparison Orthanc/Core/Toolbox.cpp @ 134:d73006baca3f
sync
author | Sebastien Jodogne <s.jodogne@gmail.com> |
---|---|
date | Mon, 13 Jun 2016 10:27:52 +0200 |
parents | 2c73a785c08e |
children | 9362080e5e3d |
comparison
equal
deleted
inserted
replaced
133:3251ec958a29 | 134:d73006baca3f |
---|---|
109 #endif | 109 #endif |
110 | 110 |
111 | 111 |
112 namespace Orthanc | 112 namespace Orthanc |
113 { | 113 { |
114 static bool finish; | 114 static bool finish_; |
115 static ServerBarrierEvent barrierEvent_; | |
115 | 116 |
116 #if defined(_WIN32) | 117 #if defined(_WIN32) |
117 static BOOL WINAPI ConsoleControlHandler(DWORD dwCtrlType) | 118 static BOOL WINAPI ConsoleControlHandler(DWORD dwCtrlType) |
118 { | 119 { |
119 // http://msdn.microsoft.com/en-us/library/ms683242(v=vs.85).aspx | 120 // http://msdn.microsoft.com/en-us/library/ms683242(v=vs.85).aspx |
120 finish = true; | 121 finish_ = true; |
121 return true; | 122 return true; |
122 } | 123 } |
123 #else | 124 #else |
124 static void SignalHandler(int) | 125 static void SignalHandler(int signal) |
125 { | 126 { |
126 finish = true; | 127 if (signal == SIGHUP) |
128 { | |
129 barrierEvent_ = ServerBarrierEvent_Reload; | |
130 } | |
131 | |
132 finish_ = true; | |
127 } | 133 } |
128 #endif | 134 #endif |
129 | 135 |
130 | 136 |
131 void Toolbox::USleep(uint64_t microSeconds) | 137 void Toolbox::USleep(uint64_t microSeconds) |
138 #error Support your platform here | 144 #error Support your platform here |
139 #endif | 145 #endif |
140 } | 146 } |
141 | 147 |
142 | 148 |
143 static void ServerBarrierInternal(const bool* stopFlag) | 149 static ServerBarrierEvent ServerBarrierInternal(const bool* stopFlag) |
144 { | 150 { |
145 #if defined(_WIN32) | 151 #if defined(_WIN32) |
146 SetConsoleCtrlHandler(ConsoleControlHandler, true); | 152 SetConsoleCtrlHandler(ConsoleControlHandler, true); |
147 #else | 153 #else |
148 signal(SIGINT, SignalHandler); | 154 signal(SIGINT, SignalHandler); |
149 signal(SIGQUIT, SignalHandler); | 155 signal(SIGQUIT, SignalHandler); |
150 signal(SIGTERM, SignalHandler); | 156 signal(SIGTERM, SignalHandler); |
157 signal(SIGHUP, SignalHandler); | |
151 #endif | 158 #endif |
152 | 159 |
153 // Active loop that awakens every 100ms | 160 // Active loop that awakens every 100ms |
154 finish = false; | 161 finish_ = false; |
155 while (!(*stopFlag || finish)) | 162 barrierEvent_ = ServerBarrierEvent_Stop; |
163 while (!(*stopFlag || finish_)) | |
156 { | 164 { |
157 Toolbox::USleep(100 * 1000); | 165 Toolbox::USleep(100 * 1000); |
158 } | 166 } |
159 | 167 |
160 #if defined(_WIN32) | 168 #if defined(_WIN32) |
161 SetConsoleCtrlHandler(ConsoleControlHandler, false); | 169 SetConsoleCtrlHandler(ConsoleControlHandler, false); |
162 #else | 170 #else |
163 signal(SIGINT, NULL); | 171 signal(SIGINT, NULL); |
164 signal(SIGQUIT, NULL); | 172 signal(SIGQUIT, NULL); |
165 signal(SIGTERM, NULL); | 173 signal(SIGTERM, NULL); |
166 #endif | 174 signal(SIGHUP, NULL); |
167 } | 175 #endif |
168 | 176 |
169 | 177 return barrierEvent_; |
170 void Toolbox::ServerBarrier(const bool& stopFlag) | 178 } |
171 { | 179 |
172 ServerBarrierInternal(&stopFlag); | 180 |
173 } | 181 ServerBarrierEvent Toolbox::ServerBarrier(const bool& stopFlag) |
174 | 182 { |
175 void Toolbox::ServerBarrier() | 183 return ServerBarrierInternal(&stopFlag); |
184 } | |
185 | |
186 ServerBarrierEvent Toolbox::ServerBarrier() | |
176 { | 187 { |
177 const bool stopFlag = false; | 188 const bool stopFlag = false; |
178 ServerBarrierInternal(&stopFlag); | 189 return ServerBarrierInternal(&stopFlag); |
179 } | 190 } |
180 | 191 |
181 | 192 |
182 void Toolbox::ToUpperCase(std::string& s) | 193 void Toolbox::ToUpperCase(std::string& s) |
183 { | 194 { |