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();
}
Ejemplo n.º 3
0
    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);
    }