42 #ifndef vtkThreadedTaskQueue_h
43 #define vtkThreadedTaskQueue_h
47 #include <condition_variable>
54 #if !defined(__WRAP__)
57 VTK_ABI_NAMESPACE_BEGIN
66 VTK_ABI_NAMESPACE_BEGIN
68 template <
typename R,
typename... Args>
73 int buffer_size = -1,
int max_concurrent_tasks = -1);
79 void Push(Args&&... args);
110 std::unique_ptr<vtkThreadedTaskQueueInternals::TaskQueue<R>> Tasks;
111 std::unique_ptr<vtkThreadedTaskQueueInternals::ResultQueue<R>> Results;
114 std::unique_ptr<std::thread[]> Threads;
117 template <
typename... Args>
122 int buffer_size = -1,
int max_concurrent_tasks = -1);
128 void Push(Args&&... args);
147 std::unique_ptr<vtkThreadedTaskQueueInternals::TaskQueue<void>> Tasks;
149 std::condition_variable ResultsCV;
150 std::mutex NextResultIdMutex;
151 std::atomic<std::uint64_t> NextResultId;
154 std::unique_ptr<std::thread[]> Threads;
157 VTK_ABI_NAMESPACE_END
158 #include "vtkThreadedTaskQueue.txx"
160 #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.