13#ifndef RTCTK_DATATASK_MESSAGEQUEUE_HPP
14#define RTCTK_DATATASK_MESSAGEQUEUE_HPP
16#include <condition_variable>
31 inline void Post(T
const& value) {
33 std::unique_lock<std::mutex> lock(m_mtx);
40 std::unique_lock<std::mutex> lock(m_mtx);
41 m_cv.wait(lock, [&] {
return not m_queue.empty(); });
42 auto ret = m_queue.front();
47 template <
class Rep,
class Period>
48 inline T
Pend(std::chrono::duration<Rep, Period> timeout) {
49 std::unique_lock<std::mutex> lock(m_mtx);
50 auto to = m_cv.wait_for(lock, timeout, [&] {
return not m_queue.empty(); });
52 throw(std::runtime_error(
"MessageQueue.Pend() timed out"));
54 auto ret = m_queue.front();
60 std::unique_lock<std::mutex> lock(m_mtx);
61 if (not m_queue.empty()) {
62 auto ret = m_queue.front();
71 std::unique_lock<std::mutex> lock(m_mtx);
72 while (not m_queue.empty()) {
79 std::condition_variable m_cv;
80 std::queue<T> m_queue;
Definition: messageQueue.hpp:29
void Post(T const &value)
Definition: messageQueue.hpp:31
T Pend()
Definition: messageQueue.hpp:39
std::optional< T > TryPend()
Definition: messageQueue.hpp:59
void Clear()
Definition: messageQueue.hpp:70
T Pend(std::chrono::duration< Rep, Period > timeout)
Definition: messageQueue.hpp:48
Definition: computationBase.hpp:33