C++ future

C++11异步操作的4个接口

future ::  异步执行任务后,future 获取结果

async  ::  异步运行一个函数 可以通过 future 获取结果 

packaged_task :: 可以封装一个函数,把它放进线程池里,如何异步执行通过 future 获取结果

promise :: 1,可以在异步线程之间 设定值 2,在函数内设定值后 可以使用 future 获取

future 与 promise

1,设定参数,然后 future 获取(可以在多线程中设定值,然后 future 返回)

void task(int a, int b, std::promise<int> &&ret)
{
    int tempa = a * 2;
    int tempb = b * 3;
    ret.set_value(tempa + tempb);
}
int main()
{
    std::promise<int> promise; // 注意类型:

    std::future<int> result = promise.get_future(); // 绑定future

    std::thread t(task, 1, 2, std::move(promise));

    cout << "res=" << result.get() << endl;

    t.join();
    return 0;
}

future async

有没有一种办法,可以让上面的代码更加简便

使用 async 异步运行函数,用 future 获取结果,这样我们就不用创建线程,再 join 线程了

int task(int a, int b)
{
    int tempa = a * 2;
    int tempb = b * 3;
    return tempa + tempb;//用future获取结果
}
int main()
{
    std::future<int> f = std::async(task, 1, 2);//异步运行
    cout << f.get() << endl;
    return 0;
}

future 与 packaged_task

int task(int a, int b)
{
    int tempa = a * 2;
    int tempb = b * 3;
    return tempa + tempb;//也是通过 future 获取 
}
int main()
{
    std::packaged_task<int(int, int)> pt(task);//投入线程池,异步执行任务

    auto res = pt.get_future();

    pt(1, 2);//执行函数

    cout << "res=" << res.get() << endl;
    return 0;
}

使用:packaged_task <返回值(函数参数,函数参数)> 对象名

相关推荐

最近更新

  1. TCP协议是安全的吗?

    2024-05-05 06:00:04       18 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2024-05-05 06:00:04       19 阅读
  3. 【Python教程】压缩PDF文件大小

    2024-05-05 06:00:04       18 阅读
  4. 通过文章id递归查询所有评论(xml)

    2024-05-05 06:00:04       20 阅读

热门阅读

  1. 项目表(31-40)

    2024-05-05 06:00:04       8 阅读
  2. Python实战开发及案例分析(2)——单目标优化

    2024-05-05 06:00:04       10 阅读
  3. Scala 补充 正则、异常处理...

    2024-05-05 06:00:04       9 阅读
  4. 【Python】数据类型

    2024-05-05 06:00:04       10 阅读
  5. vue key的原理和作用

    2024-05-05 06:00:04       6 阅读
  6. 函数的引用参数

    2024-05-05 06:00:04       7 阅读
  7. C# 中 IOC (Inversion of Control,控制反转)

    2024-05-05 06:00:04       9 阅读