Wait函数和CloseHandle依赖
Wait Functions and CloseHandle Dependency
我决定使用Wait Functions
(WaitForSingleObject,WaitForMultipleObject等)适当的线程退出。在这种情况下,问题是我是否需要显式调用CloseHandle(线程句柄)以避免内存泄漏或等待函数清理并关闭自己的句柄?如果CloseHandle
需要显式调用,我是否能够再次调用"CreateThread(相同的线程句柄)?我是否可以再次调用GetExitCodeThread() ?
注意:一个StackOverFlow问题回答我第二部分说我不能再次调用GetExitCode ,但它并没有澄清是否缺少调用CloseHandle后等待函数导致内存泄漏或不
为了避免内存泄漏,您必须调用CloseHandle
。在关闭HANDLE
之后使用GetExitCodeThread
或WaitForSingleObject
等函数会导致未定义的行为。它可能在某些时候工作,但在其他情况下,它可能会崩溃或返回错误的答案。正如在破坏自己:关闭句柄然后使用它
当给定一个无效的参数时,WaitForSingleObject返回WAIT_FAILED是真的,句柄回收意味着任何无效的句柄都可以突然再次有效(但是引用一个不相关的对象)。
出于这个原因,通常最好这样做:
CloseHandle(handle);
handle = INVALID_HANDLE_VALUE;
这意味着任何试图使用该句柄的操作都将失败,并给出相应的错误码。
一旦正确地清理了句柄,就可以安全地使用它来创建另一个线程了。
handle = CreateThread(...);
它现在是一个句柄,被分配给你的新线程,你可以再次调用GetExitCodeThread
,直到你用CloseHandle
做最后的清理。
相关文章:
- 如何从C++中的依赖类型中获得它所依赖的类型
- 将--whole archive链接器选项与CMake和具有其他库依赖项的库一起使用
- 将依赖名称显式标记为类型名和模板的奇怪之处
- 在 Windows 上,是否可以让 dll 在不使用 PATH 环境变量的情况下在另一个文件夹中查找依赖项?
- C++GTKMM gui循环依赖关系
- 通过ccmake在cmake中缓存依赖选项
- 当基类是依赖类型时,这是一个缺陷吗
- 从不同的附加依赖项中识别等同命名的函数
- 如何在 CMake 中对目标依赖项进行分组?
- 是否可以依赖函数范围的静态变量来执行程序关闭期间调用的方法?
- 为什么构建目录中新构建的共享库与安装目录中的副本具有不同的依赖项集?
- VS 2015 链接错误 无法构建依赖于 libcurl 的项目
- 通过依赖类型使用非类型模板参数的单类型模板参数类模板的部分专用化
- 为什么内存屏障依赖于变量?
- node-gyp 的先有鸡还是先有蛋的问题:指向依赖项中的头文件
- 反转依赖于 end() 的迭代器
- GCC,CMake,预编译标头和维护依赖项
- 使用 'typename' 关键字将非类型视为依赖上下文中的类型
- 使用 Git 处理 C++ Visual Studio 2019 解决方案的外部依赖项源代码管理的最佳方法是什么?
- Wait函数和CloseHandle依赖