#ifndef BLOCKINGQUEUE_H_4LEVMY0N #define BLOCKINGQUEUE_H_4LEVMY0N #include "uscxml/concurrency/tinythread.h" #include namespace uscxml { namespace concurrency { template class BlockingQueue { public: BlockingQueue() {} virtual ~BlockingQueue() { } void push(T elem) { tthread::lock_guard lock(_mutex); _queue.push_back(elem); _cond.notify_all(); } T pop() { tthread::lock_guard lock(_mutex); while (_queue.empty()) { _cond.wait(_mutex); } T ret = _queue.front(); _queue.pop_front(); return ret; } bool isEmpty() { tthread::lock_guard lock(_mutex); return _queue.empty(); } tthread::mutex _mutex; tthread::condition_variable _cond; std::list _queue; }; } } #endif /* end of include guard: BLOCKINGQUEUE_H_4LEVMY0N */