我决定使用 Wait Functions
(WaitForSingleObject,WaitForMultipleObject等)来正确退出线程 . 在这种情况下,问题是我需要 explicitly call CloseHandle (线程处理)以避免 memory leak 或等待函数清理并自行关闭句柄?如果需要显式调用 CloseHandle
,我能够调用“ CreateThread (相同的线程句柄) again 吗?我可以调用 GetExitCodeThread( ) again 吗?
注意:一个StackOverFlow问题回答我第二部分说我不能再次调用GetExitCode,但它没有说明在Wait函数导致内存泄漏与否之后是否缺少调用CloseHandle .
1 回答
为避免内存泄漏,您必须调用
CloseHandle
. 在HANDLE
关闭后使用GetExitCodeThread
或WaitForSingleObject
等函数会导致未定义的行为 . 它可能会在某些时候起作用,但在其他情况下它可能会崩溃或返回错误的答案 . 如_1313991中所述_因此,通常最好这样做:
这意味着尝试使用句柄的任何内容都将失败并显示相应的错误代码 .
一旦正确清理了句柄,就可以安全地使用它来创建另一个线程 .
它现在是一个分配给新线程的句柄,你可以再次调用
GetExitCodeThread
,直到用CloseHandle
进行最后的清理 .