等待线程加入时间限制

问题描述:

我有一个线程调用函数MyFunc,参数为params。基本上它在流中输出点,而MyFunc正在运行,超时500毫秒。我需要等待1分钟的线程,然后我需要输出“MyFunc成功完成”,如果该功能在1分钟内完成其工作或“超时”,如果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 << '.'; 

您可以使用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"; 
+0

圣洁少女,你16吗?当我16岁时我做了什么。我吃了污垢 –

+0

是的,谢谢:) – Alejandro

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