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