41 void push(
const Data& data)
44 std::lock_guard<std::mutex> lock(the_mutex);
47 the_condition_variable.notify_one();
50 void push(Data&& data)
53 std::lock_guard<std::mutex> lock(the_mutex);
54 the_queue.push(std::move(data));
56 the_condition_variable.notify_one();
59 bool empty()
const noexcept
64 size_t size()
const noexcept
66 std::lock_guard<std::mutex> lock(the_mutex);
67 return the_queue.size();
72 std::lock_guard<std::mutex> lock(the_mutex);
73 std::queue<Data>().swap(the_queue);
76 bool try_pop(Data& popped_value)
78 std::lock_guard<std::mutex> lock(the_mutex);
79 if (the_queue.empty())
83 popped_value = std::move(the_queue.front());
88 void wait_and_pop(Data& popped_value)
90 std::unique_lock<std::mutex> lock(the_mutex);
91 the_condition_variable.wait(lock, [
this] {
return !the_queue.empty(); });
92 popped_value = std::move(the_queue.front());
96 bool timed_wait_and_pop(Data& popped_value,
int wait_ms)
98 std::unique_lock<std::mutex> lock(the_mutex);
99 if (!the_condition_variable.wait_for(lock,
100 std::chrono::milliseconds(wait_ms),
101 [
this] { return !the_queue.empty(); }))
105 popped_value = std::move(the_queue.front());
111 std::queue<Data> the_queue;
112 mutable std::mutex the_mutex;
113 std::condition_variable the_condition_variable;