15#include <condition_variable>
39 pop_cv_.wait(lock, [
this] {
return !this->
q_.full(); });
40 q_.push_back(std::move(item));
50 q_.push_back(std::move(item));
57 bool dequeue_for(T& popped_item, std::chrono::milliseconds wait_duration)
61 if (!
push_cv_.wait_for(lock, wait_duration, [
this] { return !this->q_.empty(); }))
65 popped_item = std::move(
q_.front());
77 push_cv_.wait(lock, [
this] {
return !this->
q_.empty(); });
78 popped_item = std::move(
q_.front());
92 pop_cv_.wait(lock, [
this] {
return !this->
q_.full(); });
93 q_.push_back(std::move(item));
101 q_.push_back(std::move(item));
107 bool dequeue_for(T& popped_item, std::chrono::milliseconds wait_duration)
110 if (!
push_cv_.wait_for(lock, wait_duration, [
this] { return !this->q_.empty(); }))
114 popped_item = std::move(
q_.front());
124 push_cv_.wait(lock, [
this] {
return !this->
q_.empty(); });
125 popped_item = std::move(
q_.front());
135 return q_.overrun_counter();
147 q_.reset_overrun_counter();
Definition circular_q.h:16
Definition mpmc_blocking_q.h:25
void enqueue_nowait(T &&item)
Definition mpmc_blocking_q.h:46
size_t overrun_counter()
Definition mpmc_blocking_q.h:132
std::condition_variable push_cv_
Definition mpmc_blocking_q.h:152
size_t size()
Definition mpmc_blocking_q.h:138
void enqueue(T &&item)
Definition mpmc_blocking_q.h:35
void dequeue(T &popped_item)
Definition mpmc_blocking_q.h:73
void reset_overrun_counter()
Definition mpmc_blocking_q.h:144
std::condition_variable pop_cv_
Definition mpmc_blocking_q.h:153
std::mutex queue_mutex_
Definition mpmc_blocking_q.h:151
T item_type
Definition mpmc_blocking_q.h:27
mpmc_blocking_queue(size_t max_items)
Definition mpmc_blocking_q.h:28
spdlog::details::circular_q< T > q_
Definition mpmc_blocking_q.h:154
bool dequeue_for(T &popped_item, std::chrono::milliseconds wait_duration)
Definition mpmc_blocking_q.h:57
annotation details
Definition tag_strings.h:125