#ifndef ConcurrentQueue_h #define ConcurrentQueue_h #include #include #include #include #include namespace tns { struct ConcurrentQueue { public: void Initialize(CFRunLoopRef runLoop, void (*performWork)(void*), void* info); void Push(std::string message); std::vector PopAll(); void Terminate(); private: std::queue messagesQueue_; CFRunLoopSourceRef runLoopTasksSource_ = nullptr; CFRunLoopRef runLoop_ = nullptr; bool terminated = false; std::mutex mutex_; std::mutex initializationMutex_; void SignalAndWakeUp(); }; } #endif /* ConcurrentQueue_h */