1#ifndef OSMSCOUT_UTIL_PROCESSINGQUEUE_H
2#define OSMSCOUT_UTIL_PROCESSINGQUEUE_H
23#include <condition_variable>
59 std::condition_variable pushCondition;
60 std::condition_variable popCondition;
62 size_t queueLimit=std::numeric_limits<size_t>::max();
99 : queueLimit(queueLimit)
114 std::unique_lock lock(mutex);
116 pushCondition.wait(lock,[
this]{
return tasks.size()<queueLimit;});
118 tasks.push_back(task);
122 popCondition.notify_one();
135 std::unique_lock lock(mutex);
137 pushCondition.wait(lock,[
this]{
return tasks.size()<queueLimit;});
139 tasks.push_back(std::forward<T>(task));
143 popCondition.notify_one();
156 std::unique_lock lock(mutex);
158 popCondition.wait(lock,[
this]{
return !tasks.empty() || !running;});
165 std::optional<T> task=std::move(tasks.front());
170 pushCondition.notify_one();
184 std::unique_lock lock(mutex);
190 popCondition.notify_all();
void PushTask(const T &task)
Definition ProcessingQueue.h:112
ProcessingQueue & operator=(const ProcessingQueue &)=delete
void Stop()
Definition ProcessingQueue.h:182
ProcessingQueue(const ProcessingQueue &)=delete
virtual ~ProcessingQueue()=default
std::optional< T > PopTask()
Definition ProcessingQueue.h:154