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

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

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

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

2 回答

?
元芳怎么了

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

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

TA贡献1982条经验 获得超2个赞

比如在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-06-21
  • 2 回答
  • 0 关注
  • 941 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信