c++ - 使用 C++11 std::thread native_handle 以及我是否需要 CloseHandle

标签 c++ windows multithreading c++11

我开始练习使用 C++11 std::thread。通常,对于 Win32,只要我有线程句柄,我就需要调用 CloseHandle。当我使用 C++11 native_handle 时,是否仍需要调用 CloseHandle?另外,如果我不使用 C++11 native 句柄,线程句柄是否得到正确清理?

最佳答案

当然不是。
线程对象有一个析构函数,它释放对象可能获取的任何操作系统特定资源。

实际上,每个(好的)C++ 对象都有一个析构函数,可以清除需要清理的所有内容,并且这个析构函数(当代码编写正确时) 由程序自动调用。

这个习语被称为 RAII - 每个对象都有一个构造函数来收集对象所需的资源,以及一个对等析构函数,当对象超出范围时释放它们。

如果操作得当,这项技术比 C 风格的手动资源管理或“高级”垃圾收集器强大得多。

忠告,如果标准为您提供了一些实用程序,请完全忽略相应的 Win32 API。标准依赖操作系统特定的API才能正常工作。

关于c++ - 使用 C++11 std::thread native_handle 以及我是否需要 CloseHandle,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38934749/

相关文章:

swift - 在 Swift 中休眠或延迟 Timer 线程

c++ - 在没有 typedef 的情况下使用时显示编译错误的函数的 volatile 指针;需要帮助 w/"void (* volatile userFunc)(void)"

c++ - 为什么我从我的 QTouchPoint 获得无效数据?

c++ - 如何从其他 QLayout 中删除 QLayout?

windows - 使用 cmd 删除文件名前缀

Windows 查询 session 状态

java - 简单的java套接字和线程程序的问题

java - 如何让volley onResponse在UnitTest线程中运行

c++ - 对象的销毁是否正确发生?

python - Raspberrypi:从图像中去除鱼眼效果