std :: async在C ++ 11,Linux平台中不起作用

时间:2018-11-22 08:18:03

标签: c++ c++11 pthreads

bool tf()
{
    sleep(5000);
    return true;
}

int main()
{
    std::future<bool> bb = std::async(std::launch::async, tf);
    bool b = false;
    while(1)
    {   
        if(b == true) break;

        b = bb.get();
    }   

    return 0;
}

为什么不工作? 我打算在5秒钟后终止程序。但是,该程序正在冻结。

1 个答案:

答案 0 :(得分:1)

有比直接调用全局sleep更好的替代方法。使用<chrono>标头及其与std::this_thread::sleep_for一起提供的字符串文字。这不太容易出错,例如

#include <chrono>

// Bring the literals into the scope:
using namespace std::chrono_literals;

bool tf()
{
   std::this_thread::sleep_for(5s);
   //                          ^^ Awesome! How readable is this?!

   return true;
}

与您发布的其余代码片段一起使用,应该可以按预期工作。