1#ifndef THREADSAFEQUEUE_H
2#define THREADSAFEQUEUE_H
19#include <condition_variable>
30 explicit ThreadsafeQueue(std::string name =
"default",
size_t maxSize = 100000);
38 size_t Pop(T& output,
int millisecond_wait = 1000);
73 : fName(std::move(name)), max_queue_size(maxSize), is_finished(false)
80 std::unique_lock<std::mutex> lock(mutex);
81 if(queue.size() > max_queue_size) {
96 std::unique_lock<std::mutex> lock(mutex);
97 if(!queue.size() && millisecond_wait) {
98 can_pop.wait_for(lock, std::chrono::milliseconds(millisecond_wait));
105 output = queue.front();
111 can_push.notify_one();
119 std::unique_lock<std::mutex> lock(mutex);
120 return items_in_queue;
126 std::unique_lock<std::mutex> lock(mutex);
133 std::unique_lock<std::mutex> lock(mutex);
147 is_finished = finished;
std::atomic_int num_writers
void SetFinished(bool finished=true)
ThreadsafeQueue(const ThreadsafeQueue &)=default
std::atomic_bool is_finished
size_t ItemsPushed() const
size_t ItemsPopped() const
std::condition_variable can_pop
ThreadsafeQueue(std::string name="default", size_t maxSize=100000)
ThreadsafeQueue(ThreadsafeQueue &&) noexcept=default
std::condition_variable can_push
size_t Pop(T &output, int millisecond_wait=1000)