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