7 #ifndef MESSAGE_QUEUE_H 8 #define MESSAGE_QUEUE_H 10 #include <condition_variable> 14 #include <boost/noncopyable.hpp> 20 template <
typename Message>
28 void push( Message
const& msg );
29 void push( std::list<Message>& msg_list );
38 std::size_t
size()
const;
45 void pop_wait( std::list<Message>* msgs );
61 template <
typename Message>
66 template <
typename Message>
72 template <
typename Message>
75 std::list<Message> tmp;
79 std::lock_guard<std::mutex> lock(
_mutex );
87 template <
typename Message>
90 std::list<Message> tmp;
91 tmp.emplace_back( std::move( msg ) );
94 std::lock_guard<std::mutex> lock(
_mutex );
102 template <
typename Message>
107 std::lock_guard<std::mutex> lock(
_mutex );
115 template <
typename Message>
118 std::lock_guard<std::mutex> lock(
_mutex );
122 template <
typename Message>
125 std::lock_guard<std::mutex> lock(
_mutex );
130 template <
typename Message>
133 std::lock_guard<std::mutex> lock(
_mutex );
136 *msg = std::move(
_queue.front() );
141 template <
typename Message>
144 std::unique_lock<std::mutex> lock(
_mutex );
149 *msg = std::move(
_queue.front() );
153 template <
typename Message>
156 std::unique_lock<std::mutex> lock(
_mutex );
161 msgs->splice( msgs->end(),
_queue );
164 template <
typename Message>
167 std::unique_lock<std::mutex> lock(
_mutex );
168 msgs->splice( msgs->end(),
_queue );
170 template <
typename Message>
174 std::lock_guard<std::mutex> lock(
_mutex );
bool try_pop(Message *msg)
tries to get a message true on success false otherwise
void pop_remaining(std::list< Message > *msgs)
void pop_wait(Message *msg)
std::condition_variable _notifier
void push_move(Message &&msg)
void push(Message const &msg)
std::list< Message > _queue