等待线程加入时间限制
问题描述:
我有一个线程调用函数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";
答
请记住,当你开始等待,或计算你等待的次数。然后在每次迭代中检查这些值,并确定是否已经超过1分钟。在这种情况下,你退出循环。
圣洁少女,你16吗?当我16岁时我做了什么。我吃了污垢 –
是的,谢谢:) – Alejandro