繁体   English   中英

如果线程在指定时间段内没有返回,则超时

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM