void task_thread() { std::packaged_task<int(int,int)> task(::pow); std::future<int> fut = task.get_future(); std::thread task_t(std::move(task), 2, 11); task_t.join(); std::cout << "task_thread:\t" << fut.get() << '\n'; }
void task_lambda() { std::packaged_task<int(int,int)> task([] (int a, int b) { std::this_thread::sleep_for(std::chrono::seconds(3)); return ::pow(a, b); }); std::future<int> fut = task.get_future(); std::thread task_t(std::move(task), 2, 9); std::cout << "task_lambda:\t" << fut.get() << '\n'; task_t.join(); }
test_cancel() : sum(0) { completion_port port; task_scheduler scheduler(port, std::bind(&test_cancel::init, this), [] () { std::cout << "sayonara" << std::endl; } ); for (std::size_t i = 1; i < 10; ++i) { const task_t id = scheduler.async( std::bind(&test_cancel::f, this, i, placeholders::error), std::bind(&test_cancel::c, this, i, placeholders::error)); assert(task_t(i) == id); } for (std::size_t i = 2; i < 10; i+=2) { if (i%2 == 0) { scheduler.cancel(task_t(i)); } } cv_.notify_all(); port.run(); assert(sum == 0); }