使用std :: async执行的任务是阻塞,就像使用future一样

时间:2017-04-22 13:29:29

标签: c++ c++11

我很难理解为什么跟随代码阻止:

.fa_prepended fa fa-check-circle
{
  color : #f40!important;
}
.fa fa-check-circle
{
  color : #f40!important;
}

我怀疑https://vapereneur.clickfunnels.com/optin11026903 返回 { std::async(std::launch::async, [] { std::this_thread::sleep_for(5s); // this line will not execute until above task finishes? } 作为临时性,它在析构函数中加入任务线程。可能吗?

完整代码如下:

std::async

1 个答案:

答案 0 :(得分:2)

是的,std::future返回的async具有等待在析构函数中完成任务的特殊属性。

这是因为松散的线程是坏消息,而且你必须等待该线程的唯一令牌是未来的析构函数。

要解决这个问题,请存储结果期货,直到您需要完成结果,或者在极端情况下结束程序。

编写自己的线程池系统也是一个好主意;我发现C ++线程原语足以编写一个线程系统,但在raw中使用并不是我在小程序之外鼓励的东西。