#ifndef HEADER_BASE_TSQUEUE #define HEADER_BASE_TSQUEUE #include #include namespace base { // thread safe queue template class CTSQueue { public: CTSQueue() { } ~CTSQueue() { } void Push(const T& element) { std::unique_lock lock(_mutex); _queue.push(element); } bool Pop(T& value) { std::unique_lock lock(_mutex); if (_queue.empty()) { return false; } value = std::move(_queue.front()); _queue.pop(); return true; } void Clear() { std::unique_lock lock(_mutex); while (!_queue.empty()) { _queue.pop(); } } size_t Size() { std::unique_lock lock(_mutex); return _queue.size(); } private: std::queue _queue; std::mutex _mutex; }; } #endif