调用SetEvent后调用CloseHandle

时间:2011-06-23 10:28:18

标签: c++ multithreading winapi mfc

我的应用程序中运行了一个线程。在线程内部,我正在等待自动重置事件退出。我想确保在使用它之后关闭事件的句柄。我有两个选择。

  1. 致电CloseHandle
  2. 后立即致电SetEvent活动
  3. CloseHandle
  4. 行之后致电WaitForSingleObject

    请建议我哪一个是正确的方法。

3 个答案:

答案 0 :(得分:5)

当所有线程完成使用后关闭手柄。在WaitForSingleObject听起来对我来说是明智的(因为如果成功,SetEvent必须已经完成)。

或者 - 为每个线程提供自己的句柄副本(例如,通过DuplicateHandle),并在完成后分别关闭它们的副本。这更容易出错,并且需要对代码进行较少的分析。

答案 1 :(得分:2)

CloseHandle之后致电SetEvent对我没有意义。您应该(如果需要)仅在CloseHandle之后致电WaitForSingleObject

答案 2 :(得分:2)

当您确定事件已完成其工作且不再需要时,关闭事件句柄。在您检测到它之后的情况下已经设置好了。因此,WaitForSingleObject取消阻止后关闭事件处理。