线程退出事件 - C ++

时间:2011-01-13 14:16:16

标签: c++ windows multithreading events

当使用事件(使用::CreateEvent(...)创建)来通知线程退出时,是否有必要在退出线程或关闭事件句柄之前重置该事件(::ResetEvent(...)){{{ 1}})?或者,如果线程有可能重新启动,这是一个好习惯吗?这适用于Windows环境。感谢。

3 个答案:

答案 0 :(得分:3)

没有必要调用重置事件,因为当你关闭句柄时,与之关联的事件将不再有效。

答案 1 :(得分:2)

这取决于您使用的事件的语义。

如果您使用该事件触发多个线程死亡,那么您不应该在每个线程中重置该事件。如果你用它来触发只有一个线程死掉,那么它又取决于进一步的语义。如果事件用于向其他线程发出其他信号,则需要在dieing线程中重置事件。否则,如果事件仅用于表示单个线程死亡,而不是其他任何事件,那么您可以重置事件。由于事件被发出信号,其他任何东西都不会被唤醒。

您不必重置事件以防止资源泄漏。您所要做的就是CloseHandle()

答案 2 :(得分:0)

在关闭其句柄之前,无需翻转事件的设置状态。 为了进一步解释,事件的设定状态与其存在无关。您可能知道,CreateEvent(...)函数允许您设置事件的初始状态。所以如果你把它初始化为set,你应该确定它在CloseHandle()之前设置吗?当然不是,设定状态完全无关紧要。它类似于在破坏之前将类的成员重置为其起始状态。