使用事件(使用::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