等待线程加入时间限制

时间:2014-04-27 01:34:31

标签: multithreading c++11 asynchronous

我有一个调用参数MyFunc的函数params的线程。基本上它在MyFunc运行时输出流中的点,超时500毫秒。我需要等待1分钟的线程,然后我需要输出" MyFunc成功完成" 如果函数在1分钟内完成其工作或&#34 ;超时" 如果1分钟后仍在运行。我怎么能这样做?

std::future<void> f = std::async(std::launch::async, MyFunc, params);

std::chrono::milliseconds span(500);
while (f.wait_for(span) == std::future_status::timeout)
    std::cout << '.';

2 个答案:

答案 0 :(得分:3)

您可以毫无问题地使用wait_for()

std::future<void> f = std::async(std::launch::async, MyFunc, params);


auto because = std::async(std::launch::async,[&]() 
         {
           // for your use, you may want to change it from 0 seconds to something
           // like 1 second, or 500 ms
           while(f.wait_for(std::chrono::seconds(0)) != std::future_status::ready)
               std::cout << ".";
         }).wait_for(std::chrono::seconds(60));

if(because == std::future_status::ready) 
  std::cout << "Successfully Completed\n";
else
  std::cout << "Timeout";

答案 1 :(得分:0)

记住您开始等待的时间,或计算您等待的次数。然后在每次迭代中检查这些值并确定是否已超过1分钟。在这种情况下,你退出循环。