私たちの(WindowsネイティブC ++)アプリは、スレッド化されたオブジェクトとマネージャーで構成されています。それはかなりよく書かれており、マネージャーオブジェクトがミニオンのライフサイクルを制御しているのを見るデザインです。さまざまなオブジェクトがイベントをディスパッチおよび受信します。一部のイベントはWindowsからのものであり、一部は自家製です。
一般に、スレッドの相互運用性を十分に認識している必要があるため、Win32のクリティカルセクションやセマフォなどを使用した手動の同期手法を使用します。ただし、イベントハンドラーの再入可能性などが原因で、シャットダウン中にスレッドのデッドロックが発生することがあります。
中央コントローラーからシャットダウンイベントに登録し、それに応じて実行動作を変更するすべてのオブジェクトのように、これを開発しやすくするために実装できる適切なアプリシャットダウン戦略があるかどうか疑問に思います。これはあまりにも素朴ですか、それとももろいですか?
Microsoftの並列パターンライブラリなどを使用するようにアプリ全体を書き直すことを規定していない戦略を希望します。;-)
ありがとう。
編集:
多くのスレッドとイベントが常に発生している複雑なアプリでオブジェクトのライフサイクルを制御する方法を求めていると思います。Giovanniの提案は明白なものですが(私たち自身の手作業で)、アクティブオブジェクトを正しい順序でクリーンにシャットダウンするには、さまざまな既製の戦略またはフレームワークが必要であると私は確信しています。たとえば、C ++アプリをIoCパラダイムに基づいて作成する場合は、独自のコンテナーを開発する代わりに、PocoCapsuleを使用できます。アプリでオブジェクトのライフサイクルを制御するのに似たものはありますか?