51 #ifndef vtkThreadedTaskQueue_h 52 #define vtkThreadedTaskQueue_h 56 #include <condition_variable> 63 #if !defined(__WRAP__) 73 template <
typename R,
typename... Args>
78 int buffer_size = -1,
int max_concurrent_tasks = -1);
84 void Push(Args&&... args);
115 std::unique_ptr<vtkThreadedTaskQueueInternals::TaskQueue<R> > Tasks;
116 std::unique_ptr<vtkThreadedTaskQueueInternals::ResultQueue<R> > Results;
119 std::unique_ptr<std::thread[]> Threads;
122 template <
typename... Args>
127 int buffer_size = -1,
int max_concurrent_tasks = -1);
133 void Push(Args&&... args);
152 std::unique_ptr<vtkThreadedTaskQueueInternals::TaskQueue<void> > Tasks;
154 std::condition_variable ResultsCV;
155 std::mutex NextResultIdMutex;
156 std::atomic<std::uint64_t> NextResultId;
159 std::unique_ptr<std::thread[]> Threads;
162 #include "vtkThreadedTaskQueue.txx" 164 #endif // !defined(__WRAP__) void Push(Args &&... args)
Push arguments for the work.
bool IsEmpty() const
Returns false if there's some result that may be popped right now or in the future.
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