20 void set_stop(
bool t);
25 template <
class Funct,
typename... Args>
26 auto addTask(Funct f, Args... a) -> std::future<
decltype(f(a...))> {
27 using ret =
decltype(f(a...));
29 std::function<ret()> fun = std::bind(f, a...);
31 return setFuture(fun);
35 template <
class Return>
36 std::future<Return> setFuture(std::function<Return()> func) {
37 std::shared_ptr<std::packaged_task<Return()>> task =
38 std::make_shared<std::packaged_task<Return()>>(std::move(func));
40 std::future<Return> future = task->get_future();
41 add([task]() { (*task)(); });
48 void add(std::function<
void()> task);
51 std::condition_variable condition_;
53 std::vector<std::thread> workers_;
54 std::queue<std::function<void()>> jobs_;