【发布时间】:2011-09-21 02:36:06
【问题描述】:
我的应用程序中有一个线程正在运行。在线程内部,我正在等待自动重置事件退出。我想确保在使用后关闭事件的句柄。我有两个选择。
- 在调用
SetEvent后立即调用事件的CloseHandle - 在
WaitForSingleObject行之后调用CloseHandle
请建议我哪种方法是正确的。
【问题讨论】:
标签: c++ multithreading winapi mfc
我的应用程序中有一个线程正在运行。在线程内部,我正在等待自动重置事件退出。我想确保在使用后关闭事件的句柄。我有两个选择。
SetEvent 后立即调用事件的CloseHandle
WaitForSingleObject 行之后调用CloseHandle
请建议我哪种方法是正确的。
【问题讨论】:
标签: c++ multithreading winapi mfc
当您确定事件已完成其工作并且不再需要时,关闭事件句柄。在您的情况下,这是在您检测到它已设置之后。所以,在WaitForSingleObject 解除阻塞后关闭事件句柄。
【讨论】:
当所有线程都使用完后关闭句柄。在 WaitForSingleObject 对我来说听起来很明智之后(因为如果它成功,则 SetEvent 必须已经完成)。
或者 - 给每个线程自己的句柄副本(例如通过 DuplicateHandle),并在完成后关闭它们的副本。这更难出错,并且需要更少的代码分析。
【讨论】:
在SetEvent 之后调用CloseHandle 对我来说没有意义。您应该(如果需要)仅在 WaitForSingleObject 之后致电 CloseHandle。
【讨论】: