
[英]On windows 7, thread appears to be hung at _endthreadex and Waitforsingleobject with a timeout doesn't signal
[英]Timeout if a thread doesn't return within a specified period
我想在 MSVC C++ 中异步执行 lambda function。 但是如果 function 没有在指定的持续时间内返回结果,那么调用者应该只返回一个超时标志,使线程分离,以便它以后可以以干净的 memory 安全方式退出。
我可以使用 std::async 和 std::future 在某种程度上实现这一点,但是由于某些错误,我的实现以某种方式泄漏了 memory。 如何使用 std::thread + detach 语义实现相同的行为?
auto f = std::make_shared<std::future<T>>();
*f = std::async(std::launch::async, [f, fun]() { return fun(); });
auto status = f->wait_for(timeoutInSeconds);
if (status == std::future_status::timeout)
{
return std::make_tuple(false, T{});
}
return std::make_tuple(true, f->get());
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.