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

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

潇湘沐

std::async会返回一个std::future,只有在std::futrue析构的时候才会阻塞。你把这个future存在一个地方(比如类成员),不要让它在构造结束的时候的时候析构就好了。

catspeake

比如在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;
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

JavaScript