如何检查 std::thread
是否仍在运行(以独立于平台的方式)?它缺少 timed_join()
方法,而 joinable()
不是为了那个。
我想在线程中用 std::lock_guard
锁定一个互斥锁,并使用互斥锁的 try_lock()
方法来确定它是否仍然被锁定(线程正在运行),但这似乎是不必要的对我来说很复杂。
你知道更优雅的方法吗?
更新: 要明确:我想检查线程是否干净退出。为此目的,“挂起”线程被视为正在运行。
原文由 kispaljr 发布,翻译遵循 CC BY-SA 4.0 许可协议
If you are willing to make use of C++11
std::async
andstd::future
for running your tasks, then you can utilize thewait_for
function ofstd::future
检查线程是否仍然以这样的简洁方式运行:如果您必须使用
std::thread
那么您可以使用std::promise
来获取未来对象:这两个示例都将输出:
这当然是因为在任务完成之前检查线程状态。
但是话又说回来,像其他人已经提到的那样做可能会更简单:
编辑:
还有
std::packaged_task
与std::thread
一起使用比使用std::promise
更清洁的解决方案: