54 #ifndef vtkThreadedTaskQueue_h
55 #define vtkThreadedTaskQueue_h
59 #include <condition_variable>
66 #if !defined(__WRAP__)
76 template <
typename R,
typename... Args>
81 int buffer_size = -1,
int max_concurrent_tasks = -1);
87 void Push(Args&&... args);
118 std::unique_ptr<vtkThreadedTaskQueueInternals::TaskQueue<R>> Tasks;
119 std::unique_ptr<vtkThreadedTaskQueueInternals::ResultQueue<R>> Results;
122 std::unique_ptr<std::thread[]> Threads;
125 template <
typename... Args>
130 int buffer_size = -1,
int max_concurrent_tasks = -1);
136 void Push(Args&&... args);
155 std::unique_ptr<vtkThreadedTaskQueueInternals::TaskQueue<void>> Tasks;
157 std::condition_variable ResultsCV;
158 std::mutex NextResultIdMutex;
159 std::atomic<std::uint64_t> NextResultId;
162 std::unique_ptr<std::thread[]> Threads;
165 #include "vtkThreadedTaskQueue.txx"
167 #endif // !defined(__WRAP__)
void Push(Args &&...args)
Push arguments for the work.
bool TryPop(R &result)
Attempt to pop without waiting.
void Flush()
Blocks till the queue becomes empty.
vtkThreadedTaskQueue(std::function< R(Args...)> worker, bool strict_ordering=true, int buffer_size=-1, int max_concurrent_tasks=-1)
bool Pop(R &result)
Pop the last result.
simple threaded task queue
bool IsEmpty() const
Returns false if there's some result that may be popped right now or in the future.