0

クラス P、クラス Q、およびクラス R があり、それに応じてテーブル Pt、テーブル Qt、およびテーブル Rt を更新しています。クラス P は、グラフィカル インターフェイス Pi から変更可能であり、Qi および Ri についても同様です。

ここで、クラス P、Q、および R の間で共有される特定のデータがあります。

このため、Pi、Qi、Ri が同時にデータを更新するたびに、(すべてのインターフェイスで) メッセージが表示され、画面がフリーズすることをユーザーに伝えたいと考えています。「このデータは他の場所から変更されています。しばらくお待ちください。しばらくの間。」

ここで Observable パターンを使用することを考えました。これらのクラス P、Q、R は Observable に登録され、observable が同時アクセスを処理します。それは正しい方法ですか?

4

2 に答える 2

0

オブザーバーだけがあなたのために何か良いことをするかどうかはわかりません。GUIレンダラースレッドは1つだけである必要があり、最小限の作業のみを実行する必要があります。また、遅延が発生するため、最小限の同時実行性が含まれている必要があります。

イベント(オブザーバーの形式)コールバックがあなたの要件に合うと思います。

于 2012-09-13T14:12:06.660 に答える
0

私には良い計画のように思えます。コードを条件付きブロックに配置し、オブザーバー オブジェクトをチェックして、このコードの名前付きロックが設定されているかどうかを確認し、そうでない場合はコードを実行し、それ以外の場合はユーザーに応答します。データが変更されていることを伝えます。言語と環境に応じて、これを行うさまざまな方法があります。私は名前付きロックのファンです。これは、オブザーバーオブジェクトに属する連想配列に一意の名前でロックを設定する場所であり、オブザーバーオブジェクトには、名前付きロックが存在するかどうか、およびそれがあるかどうかを確認するメソッドがありますロックされました。

実行するデータを変更するためにすべての同時リクエストが必要な場合は、キューまたはリクエストを編成して処理できるキュー オブジェクトを作成することも価値があります。これは、オブザーバー オブジェクトがロックを解放したときにキュー内の次のアイテムを処理します。

于 2012-09-13T12:08:59.773 に答える