9 #ifndef RTCTK_DATATASK_MESSAGEQUEUE_HPP
10 #define RTCTK_DATATASK_MESSAGEQUEUE_HPP
13 #include <condition_variable>
26 inline void Post(T
const& value) {
28 std::unique_lock<std::mutex> lock(m_mtx);
35 std::unique_lock<std::mutex> lock(m_mtx);
36 m_cv.wait(lock, [&]{
return not m_queue.empty();});
37 auto ret = m_queue.front();
42 template <
class Rep,
class Period>
43 inline T
Pend(std::chrono::duration<Rep, Period> timeout) {
44 std::unique_lock<std::mutex> lock(m_mtx);
45 auto to = m_cv.wait_for(lock, timeout, [&]{
return not m_queue.empty();});
47 throw(std::runtime_error(
"MessageQueue.Pend() timed out"));
49 auto ret = m_queue.front();
55 std::unique_lock<std::mutex> lock(m_mtx);
56 if(not m_queue.empty()) {
57 auto ret = m_queue.front();
66 std::unique_lock<std::mutex> lock(m_mtx);
67 while(not m_queue.empty()) {
74 std::condition_variable m_cv;
75 std::queue<T> m_queue;