C++11代替 `GetExitCodeThread`监控线程状态?

标签 c++ multithreading c++11

我正在对现有应用程序进行大型重构和移植,该应用程序使用 Windows 线程做一些非常壮观(非常可怕)的事情。

现在,有一个内部逻辑在一组正在运行的线程上调用 GetExitCodeThread(m_threadHandle, &exitCode);,然后检查 exitCode == STILL_ACTIVE 以确定如果有问题的线程仍在执行或已返回,然后使用它来对某些内部逻辑进行排序。

如何检查 std::thread 是否仍在执行,或者是否已返回/抛出异常?

我知道 std::asyncstd::promisesstd::future。但是,使用这些将涉及大量重构,而且我觉得我对代码库的了解还不足以在不破坏其他许多东西的情况下进行如此规模的更改。

最佳答案

在 Windows 上,线程对象在退出时发出信号。

因此,在有效的线程句柄上调用 WaitForSingleObject()(在您的情况下,您将通过 std::thread::native_handle() 获得)超时值为 0 将返回 WAIT_TIMEOUT,表明该线程确实仍处于事件状态。

关于C++11代替 `GetExitCodeThread`监控线程状态?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29289663/

相关文章:

ios - CGPDFDocument线程

c++ - 由于对模板化类型的通用(前向)引用而无法实例化函数模板

multithreading - Thread_Guard类中std::thread引用的默认值是多少?

c++ - basic_ostringstream::str 悬挂指针

C++ 我从这段代码中得到 g++ 4.4.3 的 ‘;’ 之前的预期 '\xa'

c++ - 如何为 std::array 使用默认参数? "array must be initialized with a brace-enclosed initializer"

multithreading - 如何取消(不终止) boost 线程?

C++ 如何从一个模板类转换为另一个模板类?

c++ - 去除 boost::fusion 序列中的引用

c++ - QtCore、QMutex类、锁函数——栈溢出失败