27 #include <condition_variable>
32 class MessageChannel {
34 MessageChannel(): buffer_size(10), stop_requested(false) { }
36 MessageChannel(
int sz): buffer_size(sz), stop_requested(false) { }
38 void set_buffer_size(
int sz){
39 std::lock_guard<std::mutex> lock(mutex);
45 std::lock_guard<std::mutex> lock(mutex);
46 stop_requested =
true;
51 std::lock_guard<std::mutex> lock(mutex);
55 bool send(T
const& data){
56 std::unique_lock<std::mutex> lock(mutex);
59 cond.wait(lock, [
this]{
return (queue.size()<buffer_size || stop_requested);} );
62 if(stop_requested)
return false;
69 bool recieve(T& popped_value){
70 std::unique_lock<std::mutex> lock(mutex);
73 cond.wait(lock, [
this]{
return (!queue.empty() || stop_requested);} );
76 if(stop_requested && queue.empty())
return false;
78 popped_value = queue.front();
86 std::condition_variable cond;