comparison Core/Toolbox.cpp @ 1101:e5686a703c63

ServerBarrier with external stop condition
author Sebastien Jodogne <s.jodogne@gmail.com>
date Thu, 07 Aug 2014 10:21:43 +0200
parents e494ceb8d763
children ce6386b37afd
comparison
equal deleted inserted replaced
1100:f21f7783f934 1101:e5686a703c63
122 #error Support your platform here 122 #error Support your platform here
123 #endif 123 #endif
124 } 124 }
125 125
126 126
127 void Toolbox::ServerBarrier() 127 static void ServerBarrierInternal(bool* stopFlag)
128 { 128 {
129 #if defined(_WIN32) 129 #if defined(_WIN32)
130 SetConsoleCtrlHandler(ConsoleControlHandler, true); 130 SetConsoleCtrlHandler(ConsoleControlHandler, true);
131 #else 131 #else
132 signal(SIGINT, SignalHandler); 132 signal(SIGINT, SignalHandler);
133 signal(SIGQUIT, SignalHandler); 133 signal(SIGQUIT, SignalHandler);
134 signal(SIGTERM, SignalHandler); 134 signal(SIGTERM, SignalHandler);
135 #endif 135 #endif
136 136
137 // Active loop that awakens every 100ms
137 finish = false; 138 finish = false;
138 while (!finish) 139 while (!(*stopFlag || finish))
139 { 140 {
140 USleep(100000); 141 Toolbox::USleep(100 * 1000);
141 } 142 }
142 143
143 #if defined(_WIN32) 144 #if defined(_WIN32)
144 SetConsoleCtrlHandler(ConsoleControlHandler, false); 145 SetConsoleCtrlHandler(ConsoleControlHandler, false);
145 #else 146 #else
147 signal(SIGQUIT, NULL); 148 signal(SIGQUIT, NULL);
148 signal(SIGTERM, NULL); 149 signal(SIGTERM, NULL);
149 #endif 150 #endif
150 } 151 }
151 152
153
154 void Toolbox::ServerBarrier(bool& stopFlag)
155 {
156 ServerBarrierInternal(&stopFlag);
157 }
158
159 void Toolbox::ServerBarrier()
160 {
161 bool stopFlag = false;
162 ServerBarrierInternal(&stopFlag);
163 }
152 164
153 165
154 void Toolbox::ToUpperCase(std::string& s) 166 void Toolbox::ToUpperCase(std::string& s)
155 { 167 {
156 std::transform(s.begin(), s.end(), s.begin(), toupper); 168 std::transform(s.begin(), s.end(), s.begin(), toupper);