C++ Wait函数和CloseHandle依赖关系

C++ Wait函数和CloseHandle依赖关系,c++,winapi,memory-leaks,thread-safety,wait,C++,Winapi,Memory Leaks,Thread Safety,Wait,我决定使用等待函数(WaitForSingleObject、WaitForMultipleObject等)来正确退出线程。在这种情况下,问题是我是否需要显式调用CloseHandle(线程句柄)以避免内存泄漏,还是等待函数自行清理并关闭句柄?如果需要显式调用CloseHandle,我是否能够再次调用“CreateThread(相同的线程句柄)”?我是否能够再次调用GetExitCodeThread() 注意:一个StackOverFlow问题回答了我的问题,第二部分说我不能再次调用GetExit

我决定使用
等待函数
(WaitForSingleObject、WaitForMultipleObject等)来正确退出线程。在这种情况下,问题是我是否需要显式调用CloseHandle(线程句柄)以避免内存泄漏,还是等待函数自行清理并关闭句柄?如果需要显式调用
CloseHandle
,我是否能够再次调用“CreateThread(相同的线程句柄)?我是否能够再次调用GetExitCodeThread()


注意:一个StackOverFlow问题回答了我的问题,第二部分说我不能再次调用GetExitCode,但它没有说明在等待后调用CloseHandle函数是否会导致内存泄漏。

要避免内存泄漏,必须调用
CloseHandle
。使用
GetExitCodeThread
或<关闭
句柄后,code>WaitForSingleObject
会导致未定义的行为。它可能会在某些时间工作,但在其他情况下可能崩溃或返回错误答案。如中所述

当给定无效参数时,WaitForSingleObject确实返回WAIT_FAILED,但句柄回收意味着任何无效句柄都可能突然再次变为有效(但引用不相关的对象)

因此,通常最好是:

CloseHandle(handle);
handle = INVALID_HANDLE_VALUE;
这意味着任何尝试使用句柄的操作都将失败,并产生相应的错误代码

正确清理句柄后,可以安全地使用它创建另一个线程

handle = CreateThread(...);

现在,它是分配给新线程的句柄,您可以再次调用
GetExitCodeThread
,直到使用
CloseHandle
进行最终清理为止。为了避免内存泄漏,必须在
之后使用
GetExitCodeThread
WaitForSingleObject
等函数调用
CloseHandle
>句柄
已关闭会导致未定义的行为。它可能会在某些时间工作,但在其他情况下可能会崩溃或返回错误答案。如中所述

当给定无效参数时,WaitForSingleObject确实返回WAIT_FAILED,但句柄回收意味着任何无效句柄都可能突然再次变为有效(但引用不相关的对象)

因此,通常最好是:

CloseHandle(handle);
handle = INVALID_HANDLE_VALUE;
这意味着任何尝试使用句柄的操作都将失败,并产生相应的错误代码

正确清理句柄后,可以安全地使用它创建另一个线程

handle = CreateThread(...);
它现在是一个分配给新线程的句柄,您可以再次调用
GetExitCodeThread
,直到使用
CloseHandle
进行最终清理