24 #include <condition_variable>
33 virtual void exec(
const C& context) = 0;
36 template <
typename T,
typename C>
40 void exec(
const C& context)
override {
75 task = std::move(
myQueue.front());
82 template <
typename TaskT>
83 auto push(TaskT&& task) -> std::future<decltype(task(std::declval<C>()))> {
84 using PkgTask = std::packaged_task<decltype(task(std::declval<C>()))(C)>;
85 auto job = std::unique_ptr<Task<PkgTask, C>>(
new Task<PkgTask, C>(PkgTask(std::forward<TaskT>(task))));
86 auto future = job->task.get_future();
89 myQueue.emplace(std::move(job));
101 task = std::move(
myQueue.front());
106 template <
typename TaskT>
107 auto tryPush(TaskT&& task,
bool& success) -> std::future<decltype(task(std::declval<C>()))> {
108 std::future<decltype(task(std::declval<C>()))> future;
115 using PkgTask = std::packaged_task<decltype(task(std::declval<C>()))(C)>;
116 auto job = std::unique_ptr<Task<PkgTask, C>>(
new Task<PkgTask, C>(PkgTask(std::forward<TaskT>(task))));
117 future = job->task.get_future();
119 myQueue.emplace(std::move(job));
virtual ~TaskBase()=default
virtual void exec(const C &context)=0
void exec(const C &context) override
auto tryPush(TaskT &&task, bool &success) -> std::future< decltype(task(std::declval< C >()))>
bool waitAndPop(TaskPtrType &task)
bool tryPop(TaskPtrType &task)
std::condition_variable myReady
TaskQueue & operator=(const TaskQueue &)=delete
std::queue< TaskPtrType > myQueue
TaskQueue(const TaskQueue &)=delete
std::unique_lock< std::mutex > LockType
auto push(TaskT &&task) -> std::future< decltype(task(std::declval< C >()))>
std::unique_ptr< TaskBase< C > > TaskPtrType
void setEnabled(bool enabled)