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);
96 bool TryPop(R& result);
102 bool IsEmpty()
const;
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);
139 bool IsEmpty()
const;
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__)
simple threaded task queue