我們的(Windows本地C++)應用程序由線程對象和管理器組成。它寫得非常好,設計中可以看到管理器對象控制着他們的爪牙的生命週期。各種物體發送和接收事件;有些事件來自Windows,有些是自制的。受控應用程序關閉策略
一般情況下,我們有,所以我們使用使用Win32臨界區,信號燈等的手卷同步技術是非常知曉線程的互操作性。但是,偶爾我們會因爲事件處理程序重入等原因而在關閉期間遭受線程死鎖。
現在我想知道是否有一個像樣的應用程序關閉策略,可以讓我們更容易開發 - 就像每個對象從中央控制器註冊關閉事件並相應地更改其執行行爲?這是太天真還是脆弱?
,我寧願沒有規定重寫整個應用程序使用微軟的並行模式庫或類似的策略。 ;-)
感謝。
編輯:
我想我要求的方法在複雜的應用程序中許多線程和事件被解僱所有的時間控制對象的生命週期。 Giovanni的建議很明顯(我們自己動手滾動),但我相信必須有各種現成的策略或框架,才能以正確的順序乾淨地關閉活動對象。例如,如果您想將您的C++應用程序基於IoC範例,則可以使用PocoCapsule而不是嘗試開發自己的容器。在應用程序中是否有類似的控制對象生命週期?
爲什麼事件處理程序(已使用)/(尤其是問題)在關機時(而不是在其他時間)? – Mankarse
我只是想寫一個答案,但我意識到這個問題是無法解析的,因爲它如果你遇到了死鎖,那麼這不是一個設計問題,而是一個實現問題(當然你現在的設計可能會使一個正確的實現變得不可能)任何修復死鎖的設計都是一個改進。 – Mankarse
@mankarse因爲我們的關閉策略在某些地方不夠強大,以防止在事件被調度和處理的過程中出現死鎖,當然這些都是簡單的錯誤,並且當發現時,這些錯誤是固定的。 – dripfeed