44#include < VCELL/MessageEventManager.h>
55#include < iostream>
66#include < utility>
7+ #include < format>
8+ #include < exception>
9+ #include < system_error>
710
811MessageEventManager::MessageEventManager (std::function<void (WorkerEvent*)> sendUpdateFunction):
912 stopRequested{false },
1013 sendUpdateFunction{std::move (sendUpdateFunction)},
11- eventQueueProcessingWorkerThread ([this ]() {this ->processQueue ();}) // Should auto-start thread
14+ eventQueueProcessingWorkerThread ([this ]() {this ->performQueueProcessing ();}) // Should auto-start thread
1215{
1316
1417}
@@ -32,6 +35,7 @@ void MessageEventManager::enqueue(const JobEvent::Status status, const char *eve
3235
3336void MessageEventManager::requestStopAndWaitForIt () {
3437 std::unique_lock stopRequestedLock{this ->stopRequestedMutex };
38+ if (this ->stopRequested ) return ;
3539 this ->stopRequested = true ;
3640 this ->needMessageProcessingForeman .notify_all ();
3741 this ->requestedStopForeman .wait (stopRequestedLock, [this ]()->bool {return this ->eventQueue .empty ();});
@@ -47,6 +51,18 @@ bool MessageEventManager::stopWasCalled() {
4751// / Private Methods ///
4852// /////////////////////////////////////////////////
4953
54+ void MessageEventManager::performQueueProcessing () {
55+ try {
56+ processQueue ();
57+ } catch (std::system_error e) {
58+ std::cerr << std::format (" System Error (Code {} - {}): {}" , std::to_string (e.code ().value ()), e.code ().category ().name (), e.what ()) << std::endl;
59+ } catch (std::exception& e) {
60+ std::cerr << e.what () << std::endl;
61+ } catch (...) {
62+ std::cerr << " An unknown exception occurred while processing the event queue!" << std::endl;
63+ }
64+ }
65+
5066void MessageEventManager::processQueue () {
5167 while (true ) {
5268 WorkerEvent* event;
0 commit comments