2011-01-13 128 views
1

使用事件(使用::CreateEvent(...)創建)發出線程退出的信號時,是否需要在退出線程或關閉事件句柄(::CloseHandle(...))之前重置該事件(::ResetEvent(...))?或者,如果線程有可能重新啓動,是不是很好的做法?這是針對Windows環境的。謝謝。線程退出事件 - C++

+0

請更具體。即一些代碼會有所幫助。根據您提供的信息,我所知道的唯一的良好做法是,您應該確保在事件不再需要時立即調用:: CloseHandle,並確保您不會嘗試事後使用該事件 – ds27680 2011-01-13 14:26:50

回答

2

它取決於您使用的事件的語義。

如果您使用該事件觸發多個線程死亡,那麼您不應該在每個線程中重置該事件。如果你用它來觸發只有一個線程死掉,那麼它又取決於進一步的語義。如果該事件用於向其他線程發送其他信息,則需要在中繼線程中重置該事件。否則,如果該事件僅用於發信號通知單個線程死亡,並且沒有其他事件,那麼您可以重置事件或不重置事件。由於事件發出信號,沒有別的東西會醒來。

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

3

沒有必要調用重置事件,因爲當你關閉句柄時,與之關聯的事件將不再有效。

0

在關閉它的句柄之前,沒有必要翻轉事件的設置狀態。 爲了進一步解釋,事件的設置狀態與其存在無關。正如您可能知道的那樣,CreateEvent(...)函數允許您設置事件的初始狀態。所以,如果你初始化它設置,你應該確定它設置之前CloseHandle()?當然不是,集合狀態是完全無關緊要的。類似於將類的成員重置爲初始狀態,然後再將其破壞。