学习笔记(12):c++11并发与多线程-async、future、packaged_task、promise_a32629的博客-程序员秘密

技术标签: 并发  c++  c语言  c++11  多线程  研发管理  

立即学习:https://edu.csdn.net/course/play/9377/196528?utm_source=blogtoedu

1. std::async、std::futrue创建后台任务并返回值

希望线程返回一个结果

std::async是一个函数模版,用来启动一个异步任务,启动一个异步任务后,他返回一个std::future对象,std::futrue是一个类模版。

什么叫“启动一个异步任务”,就是自动创建一个线程并开始执行线程入口函数,它返回一个std::futrue对象

这个std::futrue对象里含有入口函数所返回的结果,我们可以通过调用futrue对象的成员函数get()来获取结果。

这个结果没法马上拿到,在将来的某个时刻可以拿到。

程序会卡在get,直到子线程执行结束并返回值,所以一定要有返回值。

2. std::packaged_task

打包任务,把任务包装起来

是一个类模版,它的模版参数是各种可调用对象;通过std::packaged_task把各种可调用对象包装起来,方便将来作为线程入口函数 

3. std::promise

类模版,可以在某个线程中给它复制,然后我们可以在其他线程中,把这个值取出来。

void mythread(std::promise<int> &tmpp, int calc)

{

calc++;

calc*=10;

std::chrono::milliseconds dura(5000);

 

int result = calc;

tmpp.set_value(result);

return;

}

std::promise<int> myprom;

std::thread tl(mythread, std::ref(prom),180);

 

std::futrue<int> ful = myprom.get_future();

cout<<ful.get<<endl;

4. 小结

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/a32629/article/details/104669922

智能推荐

HTML鼠标悬停倒三角变正三角,HTML5/Canvas交互式漂浮三角形动画背景_安夫的博客-程序员秘密

JavaScript语言:JaveScriptBabelCoffeeScript确定var Triangle = function(params) {this.position = params.position || {x: 0,y: 0};this.rotation = params.rotation || 0;this.color = params.color || '255,255,25...

PooledByteBuf源码分析_poolbytebuf源码解释_HryReal的博客-程序员秘密

1.成员变量先来看一下PooledByteBuf的类声明abstract class PooledByteBuf<T> extends AbstractReferenceCountedByteBuf 为什么要加模版呢? 他的一个成员protected T memory;由于不知道的T是什么数据类型,所以定义了模板类可以从他的字类中看出来final class PooledDirectByteBuf

C++ MFC操作基础 以及 常用控件 - CEdit_c++mfc 函数外调用edit_Android小码家的博客-程序员秘密

关闭窗口//这是通过类向导自动生成的 如果看不懂推荐去看我的另一篇博客://https://blog.csdn.net/qq_20330595/article/details/82382480void NewDailog::OnClickedSeeYou(){ //关闭程序 //DestroyWindow(); //AfxGetMainWnd()-&amp;amp;amp;gt;Se...

可手动控制定时任务_YangTG5号的博客-程序员秘密

需求介绍增加对数据的订单监控,达到数据配置的要求时候发送短信模型设计create table MKT_WARING( mkt_waring_id NUMBER(16), --主键 waring_sql VARCHAR2(3000), --sql waring_sql_param VARCHAR2(500), --sql参数 wa...

《阿里巴巴Java规约》扫描插件初步使用_vaecer的博客-程序员秘密

前言阿里巴巴于10月14日在杭州云栖大会上,正式发布众所期待的《阿里巴巴Java开发规约》扫描插件! 插件1、插件有哪些功能?阿里技术公众号于今年的2月9日首次公布《阿里巴巴Java开发规约》,瞬间引起全民代码规范的热潮,上月底又发布了PDF的终极版,大家踊跃留言,期待配套的静态扫描工具开放出来。 为了让开发者更加方便、快速将规范推动并实行起来,阿里巴巴基于手册内容,研发了一套自动化的IDE检测

python基础系列教程——python面向对象编程全解_腾讯数据架构师的博客-程序员秘密

全栈工程师开发手册 (作者:栾鹏) python教程全解python面向对象编程全解。面向对象技术简介类(Class):用来描述具有相同的属性和方法的对象的集合。它定义了该集合中每个对象所共有的属性和方法。对象是类的实例(对象是类实例化之后的结果)。类变量:类变量在整个实例化的对象中是公用的。类变量定义在类中且在函数体之外。类变量通常不作为实例变量使用。数据成员:类变量或者实例变量用于

随便推点

Redis分布式锁实现以及错误案例分析_呦-写bug呢的博客-程序员秘密

最近看了一下分布式锁的知识,分布式锁在实际中用的还是比较多的,因为在高并发的情况下,不适用分布式锁的话会导致数据肯定是有问题的,例如电商平台的秒杀商品库存的问题。选用redis的原因就是:1. Redis有很高的性能。2. Redis本身就是单线程的所以不存在并发的问题。3. 以及Redis命令对此支持较好,实现起来比较方便。话不多说,直接看代码,关于一些细节问题和解释我都已...

Windows下TortoiseGit 自动记住密码_黄小黑的博客-程序员秘密

在windows环境下使用tortoistGit时,每次执行pull、commit或push操作时,都需要输入密码,很麻烦。如图所示,加入配置:[credential] helper = store 输入一次密码后,就会记住了,下次就不用输了。那么,如果输错了密码后被记住了,可以在控制面板中找到windows凭据管理器,找到对应的git地址的凭据进行编辑或删除重新输入。...

运行celery的worker出现的问题_celery worker假死_liang_zhi_feng的博客-程序员秘密

celery -A celery_tasks.tasks worker -l infoError:Unable to load celery application.The module goods was not found.)有人出现过这种情况吗?在redis都开了的情况下,还出现这样的问题

高级嵌入式c语言编程,嵌入式系统高级C语言编程及位操作_Florelle的博客-程序员秘密

}问题3:嵌入式系统高级C语言编程一个整型数int a;一个指向整型数的指针int *a;一个指向指针的指针,它指向的指针是指向一个整型数int **a;一个有10个整型数的数组int a[10];一个有10个指针的数组,该指针是指向一个整型数的int*a[10];一个指向函数的指针,该函数有一个整型参数并返回一个整型数int (*a)(int);一个有10个指针的数组,该指针指向一个函数,该函数...

微服务技术选型之路_javarrr的博客-程序员秘密

本文以笔者个人经历讲述关于微服务方面的技术选型和相关知识点。微服务模式的项目从初建到上线部署应用,每一个环节都会涉及到相当多的技术细节(上线后的性能调优更需要)。本文着重介绍一套微服务搭建流程中面临的一些技术选型,战略性的技术方案及相关技术的简要介绍,不做每一项技术的深入说明。微服务简介微服务是指开发一个单个小型的但有业务功能的服务,每个服务都有自己的处理和轻量通讯机制,可以部署在单...

2022年T电梯修理特种作业证考试题库模拟考试平台操作_主体结构拆除,宜先拆除承重结构_童话小镇(王雅丽)的博客-程序员秘密

题库来源:安全生产模拟考试一点通公众号小程序2022T电梯修理考试练习题为T电梯修理培训试题高频考题覆盖!2022年T电梯修理特种作业证考试题库模拟考试平台操作根据T电梯修理新版教材大纲编写。T电梯修理考试题库随时根据安全生产模拟考试一点通提高考试通过率。1、【多选题】电梯各轮的防护罩,作用时()。( AB )A、防伤人B、防杂物落入C、防脱槽D、防止雨水2、【多选题】电气控制柜,是控制电梯运行的核心设备。平时保养的主要内容,是()。( ABCD )A、电气器件除灰B、元件和端子标志检查C、开关、按

推荐文章

热门文章

相关标签