C++11——async

转载来自:https://www.cnblogs.com/taiyang-li/p/5914167.html

#include <future>
#include <iostream>

bool is_prime(int x)
{
    for (int i = 2; i < x; i++)
    {
        if (x % i == 0)
            return false;
    }
    return true;
}

int main()
{
    std::future<bool> fut = std::async(is_prime, 700020007);
    std::cout << "please wait";
    std::chrono::milliseconds span(10);
    while (fut.wait_for(span) != std::future_status::ready)
        std::cout << ".";
    std::cout <<"哇哈哈哈" << std::endl;

    bool ret = fut.get();
    std::cout << "final result: " << ret << std::endl;
    system("pause");
    return 0;
}

std::async会首先创建线程执行is_prime(700020007), 任务创建之后,std::async立即返回一个std::future对象。

  主线程既可使用std::future::get获取结果,如果调用过程中,任务尚未完成,则主线程阻塞至任务完成。

  主线程也可使用std::future::wait_for等待结果返回,wait_for可设置超时时间,如果在超时时间之内任务完成,则返回std::future_status::ready状态;如果在超时时间之内任务尚未完成,则返回std::future_status::timeout状态。

posted @ 2021-11-08 10:18  冰糖葫芦很乖  阅读(359)  评论(0编辑  收藏  举报