2011-01-13 85 views
1

使用事件(使用::CreateEvent(...)创建)发出线程退出的信号时,是否需要在退出线程或关闭事件句柄(::CloseHandle(...))之前重置该事件(::ResetEvent(...))?或者,如果线程有可能重新启动,是不是很好的做法?这是针对Windows环境的。谢谢。线程退出事件 - C++

+0

请更具体。即一些代码会有所帮助。根据您提供的信息,我所知道的唯一的良好做法是,您应该确保在事件不再需要时立即调用:: CloseHandle,并确保您不会尝试事后使用该事件 – ds27680 2011-01-13 14:26:50

回答

2

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

如果您使用该事件触发多个线程死亡,那么您不应该在每个线程中重置该事件。如果你用它来触发只有一个线程死掉,那么它又取决于进一步的语义。如果该事件用于向其他线程发送其他信息,则需要在中继线程中重置该事件。否则,如果该事件仅用于发信号通知单个线程死亡,并且没有其他事件,那么您可以重置事件或不重置事件。由于事件发出信号,没有别的东西会醒来。

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

3

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

0

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