为了账号安全,请及时绑定邮箱和手机立即绑定

std::async、std::promise、std::packaged_task会阻塞调用线程,异步还有什么意义?

std::async、std::promise、std::packaged_task会阻塞调用线程,异步还有什么意义?

MMMHUHU 2019-07-06 23:35:17
C++11std::async、std::promise、std::packaged_task会阻塞调用线程,那么异步还有意义吗?比如在UI的构造函数里面使用std::async、std::packaged_task预加载一些数据量大的信息,必须等信息加载完成,UI才会显示。那么这里的异步还有什么意义?还不如直接把异步里面的代码拿到调用线程中直接顺序执行呢。
查看完整描述

2 回答

?
人到中年有点甜

TA贡献1895条经验 获得超7个赞

std::async会返回一个std::future,只有在std::futrue析构的时候才会阻塞。你把这个future存在一个地方(比如类成员),不要让它在构造结束的时候的时候析构就好了。
                            
查看完整回答
反对 回复 2019-07-06
?
慕容3067478

TA贡献1773条经验 获得超3个赞

比如在UI的构造函数里面使用std::async、std::packaged_task预加载一些数据量大的信息,必须等信息加载完成
想想看,如果这些数据能被并行加载呢?
比如下面这样
future1=std::async;
future2=std::async;
...
futureN=std::async;
dosync;
future1.get;
do1;
future2.get;
do2;
...
futureN.get;
doN;
                            
查看完整回答
反对 回复 2019-07-06
  • 2 回答
  • 0 关注
  • 331 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号