我正在对现有应用程序进行大型重构和移植,该应用程序使用 Windows 线程做一些非常壮观(非常可怕)的事情。
现在,有一个内部逻辑在一组正在运行的线程上调用 GetExitCodeThread(m_threadHandle, &exitCode);
,然后检查 exitCode == STILL_ACTIVE
以确定如果有问题的线程仍在执行或已返回,然后使用它来对某些内部逻辑进行排序。
如何检查 std::thread
是否仍在执行,或者是否已返回/抛出异常?
我知道 std::async
、std::promises
和 std::future
。但是,使用这些将涉及大量重构,而且我觉得我对代码库的了解还不足以在不破坏其他许多东西的情况下进行如此规模的更改。
最佳答案
在 Windows 上,线程对象在退出时发出信号。
因此,在有效的线程句柄上调用 WaitForSingleObject()
(在您的情况下,您将通过 std::thread::native_handle()
获得)超时值为 0 将返回 WAIT_TIMEOUT
,表明该线程确实仍处于事件状态。
关于C++11代替 `GetExitCodeThread`监控线程状态?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29289663/