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
进行最终清理