使用事件(使用::CreateEvent(...)
创建)发出线程退出的信号时,是否需要在退出线程或关闭事件句柄(::CloseHandle(...)
)之前重置该事件(::ResetEvent(...)
)?或者,如果线程有可能重新启动,是不是很好的做法?这是针对Windows环境的。谢谢。线程退出事件 - C++
1
A
回答
2
它取决于您使用的事件的语义。
如果您使用该事件触发多个线程死亡,那么您不应该在每个线程中重置该事件。如果你用它来触发只有一个线程死掉,那么它又取决于进一步的语义。如果该事件用于向其他线程发送其他信息,则需要在中继线程中重置该事件。否则,如果该事件仅用于发信号通知单个线程死亡,并且没有其他事件,那么您可以重置事件或不重置事件。由于事件发出信号,没有别的东西会醒来。
您不必重置事件以防止资源泄漏。所有你需要做的是CloseHandle()
3
没有必要调用重置事件,因为当你关闭句柄时,与之关联的事件将不再有效。
0
在关闭它的句柄之前,没有必要翻转事件的设置状态。 为了进一步解释,事件的设置状态与其存在无关。正如您可能知道的那样,CreateEvent(...)函数允许您设置事件的初始状态。所以,如果你初始化它设置,你应该确定它设置之前CloseHandle()?当然不是,集合状态是完全无关紧要的。类似于将类的成员重置为初始状态,然后再将其破坏。
相关问题
- 1. 退出c中的线程
- 2. 使用事件退出进程(Windows,c#)
- 3. sublimetext3程序退出事件
- 4. C:输出前multithreading-父线程退出
- 5. 应用程序退出进程退出事件
- 6. 如何从事件退出线程模式
- 7. C#Abort()退出表单中的线程
- 8. C++块线程退出信号/函数
- 9. 在Windows C++中退出代码线程
- 10. 退出线程和TcpListener在C#
- 11. 退出后的C++ Builder onResize事件
- 12. 当主线程退出时,如何让子线程退出?
- 13. 块事件等待当进程退出
- 14. 退出产卵线程
- 15. 重置线程事件 - C++
- 16. C#事件和线程
- 17. C#事件:哪个线程
- 18. 线程事件处理(C#)
- 19. C#:线程安全事件
- 20. C#线程处理事件
- 21. Win32线程意外退出
- 22. C++子线程终止在main()父线程退出?
- 23. C#子线程仍在工作,即使主线程退出
- 24. Objective-C线程:退出线程,保留问题
- 25. 优雅地退出线程
- 26. 通知线程退出
- 27. 处理子进程退出事件
- 28. 节点js退出进程事件
- 29. 应用程序退出事件
- 30. POSIX线程和退出线程
请更具体。即一些代码会有所帮助。根据您提供的信息,我所知道的唯一的良好做法是,您应该确保在事件不再需要时立即调用:: CloseHandle,并确保您不会尝试事后使用该事件 – ds27680 2011-01-13 14:26:50