std :: async中的奇怪行为

时间:2015-10-16 18:20:32

标签: c++ multithreading c++11 boost std

如果时间正在运行,我希望有一项任务可以解决。

所以我试试这个:

#include <iostream>
#include <future>

using namespace std;

int main()
{
    auto handle = std::async(std::launch::deferred,[]
                        {
                            cout<<"Initializing thread..."<<endl; 
                            this_thread::sleep_for(std::chrono::seconds(5));
                        }
                );

    cout<<"Starting..."<<endl;
    handle.wait_for(std::chrono::seconds(2));

    cout<<"Finished correctly"<<endl;
    return 0;
}

输出:

  

开始......

     

正确完成

为什么不打印“初始化线程......”?我尝试交换两个chronos并且无论如何都不起作用

2 个答案:

答案 0 :(得分:1)

您永远不会要求任务的结果,因此不会安排。

height: 100vh; 替换为deferred,您就会得到您期望的结果。

答案 1 :(得分:1)

deferred仅评估 -timed wait函数。如果您更改为:

handle.wait();

你会看到线程从那时开始。