今天给大家分享一个类似多线程任务的方法,具体如下:

std::shared_future<int> tmp = std::async(p1,p2,p3);
int tmpInt = tmp.get();

1、std::future是一个非常有用也很有意思的东西,简单说std::future提供了一种访问异步操作结果的机制。

2、std::async代替线程的创建;

第一个参数是创建线程的策略(1、std::launch::async:在调用async就开始创建线程;2、std::launch::deferred:延迟加载方式创建线程。调用async时不创建线程,直到调用了future的get或者wait时才创建线程。)

第二个参数是线程函数

  第三个参数是线程函数参数

3、get()就是用来获取线程返回的结果

总结:

  当你需要并发执行多个任务,但是还要按顺序得到执行的结果,那么future的用途就来了,当你执行std::shared_future<int> tmp = std::async(std::launch::async,p2,p3);会立即创建线程去执行你的任务,然后在你需要的地方调用get()方法获取返回值,如果没有执行完,get()会等待,这样你得到的返回值就是按顺序得到的。

大家按照自己的业务去使用,有疑问可以留言。

C++,std::shared_future的使用的更多相关文章

  1. C++11 并发指南四(<future> 详解三 std::future & std::shared_future)

    上一讲<C++11 并发指南四(<future> 详解二 std::packaged_task 介绍)>主要介绍了 <future> 头文件中的 std::pack ...

  2. C++11 并发指南四(<future> 详解三 std::future & std::shared_future)(转)

    上一讲<C++11 并发指南四(<future> 详解二 std::packaged_task 介绍)>主要介绍了 <future> 头文件中的 std::pack ...

  3. 第27课 “共享状态”及其管理者(std::future/std::shared_future)

    一. “共享状态” (一)“共享状态”对象 1. 用于保存线程函数及其参数.返回值以及新线程状态等信息.该对象通常创建在堆上,由std::async.std::promise和std::package ...

  4. C++ 11新特性:std::future & std::shared_future) (转载)

    上一讲<C++11 并发指南四(<future> 详解二 std::packaged_task 介绍)>主要介绍了 <future> 头文件中的 std::pack ...

  5. std::shared_future/future

    std::future提供了一种访问异步操作结果的机制.

  6. C++11 并发指南四(<future> 详解二 std::packaged_task 介绍)

    上一讲<C++11 并发指南四(<future> 详解一 std::promise 介绍)>主要介绍了 <future> 头文件中的 std::promise 类, ...

  7. C++11并发——多线程std::thread (一)

    https://www.cnblogs.com/haippy/p/3284540.html 与 C++11 多线程相关的头文件 C++11 新标准中引入了四个头文件来支持多线程编程,他们分别是< ...

  8. C++ std::thread

    std::thread Defined in header class thread The class thread represents a single thread of execution. ...

  9. 【C++并发实战】(三) std::future和std::promise

    std::future和std::promise std::future std::future期待一个返回,从一个异步调用的角度来说,future更像是执行函数的返回值,C++标准库使用std::f ...

随机推荐

  1. 六大设计原则(二)LSP里氏替换原则

    里氏替换原则LSP(Liskov Subsituation Principle) 里氏替换原则定义 所有父类出现的地方可以使用子类替换并不会出现错误或异常,但是反之子类出现的地方不一定能用父类替换. ...

  2. Vue基本使用

    Vue.js是一款流行的开源JavaScript前端框架,旨在更好地组织与简化Web开发.Vue所关注的核心是MVC模式中的视图层,同时,它也能方便地获取数据更新,并通过组件内部特定的方法实现视图与模 ...

  3. 企业自主可控免费开源ERP:Odoo采购管理解决方案

    供应商基础资料 1. 所有的供应商基础资料,Odoo开账启用时,期初的客户数据如果大于200条,可以批量导入: 2. 点“采购/采购/供应商”菜单可以查看.编辑修改.搜索所有的供应商基础资料: 3. ...

  4. VS2015编译GEOS的debug和release版本

    目前GEOS最新的3.7.1版本支持camke进行编译.经过尝试发现通过cmake生成的工程在vs2015下面编译的时候还是存在问题,而且在中文网上也没找到解决方案. 所以还是采用了nmake进行编译 ...

  5. Java实现文本编辑时基于拼音输入的补全原型

    续前文Java实现"命令式"简易文本编辑器原型. 效果如下: 所在源码库同上文, 尚未和上文的编辑器右侧的命令区集成. 代码由How to show autocomplete as ...

  6. 产品经理之UML表达业务逻辑

    文章大纲 一. 什么是UML二. UML基础介绍三.UML实例介绍四.参考文档   一. 什么是UML   UML(Unified Modeling Language,统一建模语言) 是一种在软件设计 ...

  7. LNMP shell

    #!/bin/bash #set -x #date: 2018-12-13 #Description: 一键安装LNMP环境 or LAMP 环境 #Version: 0.4 #Author: sim ...

  8. MySQL 数据库死锁

    数据库死锁 死锁的解决办法(1) 执行下面SQL,先查看哪些表被锁住了: select b.owner,b.object_name,a.session_id,a.locked_mode from v$ ...

  9. PHP面向对象特性

    目录 创建对象 成员属性 成员方法 构造方法 析构方法 垃圾回收机制 访问修饰符 魔术方法 对象比较 继承 重载 属性重载 方法重写 属性重写 静态属性 静态方法 多态 类型约束 抽象类 接口 fin ...

  10. asp.net core导入excel

    接昨天的导出 导入excel内容 对比昨天导出的内容增加了一行实体属性名称作为标题行,这样到转换为实体的时候才能找到对应的属性. 导入代码 public IActionResult InportExc ...