# HG changeset patch # User Sebastien Jodogne # Date 1407399703 -7200 # Node ID e5686a703c63eb3f0a0b62c59a3f0bb90d3eebee # Parent f21f7783f9346310d6bc4a30287c83222ca0d5cd ServerBarrier with external stop condition diff -r f21f7783f934 -r e5686a703c63 Core/Toolbox.cpp --- a/Core/Toolbox.cpp Thu Aug 07 10:11:43 2014 +0200 +++ b/Core/Toolbox.cpp Thu Aug 07 10:21:43 2014 +0200 @@ -124,7 +124,7 @@ } - void Toolbox::ServerBarrier() + static void ServerBarrierInternal(bool* stopFlag) { #if defined(_WIN32) SetConsoleCtrlHandler(ConsoleControlHandler, true); @@ -134,10 +134,11 @@ signal(SIGTERM, SignalHandler); #endif + // Active loop that awakens every 100ms finish = false; - while (!finish) + while (!(*stopFlag || finish)) { - USleep(100000); + Toolbox::USleep(100 * 1000); } #if defined(_WIN32) @@ -150,6 +151,17 @@ } + void Toolbox::ServerBarrier(bool& stopFlag) + { + ServerBarrierInternal(&stopFlag); + } + + void Toolbox::ServerBarrier() + { + bool stopFlag = false; + ServerBarrierInternal(&stopFlag); + } + void Toolbox::ToUpperCase(std::string& s) { diff -r f21f7783f934 -r e5686a703c63 Core/Toolbox.h --- a/Core/Toolbox.h Thu Aug 07 10:11:43 2014 +0200 +++ b/Core/Toolbox.h Thu Aug 07 10:21:43 2014 +0200 @@ -49,6 +49,8 @@ namespace Toolbox { + void ServerBarrier(bool& stopFlag); + void ServerBarrier(); void ToUpperCase(std::string& s); // Inplace version