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

有没有人遇到过这个问题哈!std::async、std::promise、std::packaged_task会阻塞调用线程,异步还有什么意义?

有没有人遇到过这个问题哈!std::async、std::promise、std::packaged_task会阻塞调用线程,异步还有什么意义?

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

2 回答

?
潇湘沐

TA贡献1816条经验 获得超6个赞

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

TA贡献1111条经验 获得超0个赞

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

添加回答

举报

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