2011-12-14 19 views
2

私は、複数のスレッド間で共有するシングルトンを持っています。あるスレッドが別のスレッドと通信する必要があることもあります。イベントハンドラ対デリゲートを使用する

私は2つのアプローチを考えていた:

各スレッドは、シングルトンでデリゲートを置きます。時間が必要なときには、あるスレッドがシングルトン内の関数を呼び出して、シングルトン内の他のデリゲートを呼び出します。シングルトンは、各スレッドに何かを行うよう通知します。

他のオプションは、標準のイベント処理メカニズムを使用しています。

いずれかを使用する利点はありますか?

+0

ここでシングルトンのポイントは正確に何ですか? – Oded

+1

デリゲートもイベントハンドラも、あるスレッドから別のスレッドに制御を渡すことはできません。私はここで何かが不足していると確信しています:他のスレッドに何かをさせるために、デリゲート/イベントの中で何をする予定ですか? – dasblinkenlight

+0

それは、お互いに通信できる、異なるクラスのグローバル変数です。 – SamFisher83

答えて

3

標準的なイベントシステムは、それがあなたの望むものであれば(それはそうであると思う)、あなたはなぜホイールを再発明したいのですか?

私は、標準的なイベントはコードを見ている人にはもっとよく知られていると思いますが、もっとパフォーマンスが良いと思います。それは問題ですか?あなたはそれをperfテストしようとしましたか?

4

通知スレッドは、通知スレッドのコンテキストで発生しますが、シングルトンにデリゲートを登録したスレッド(またはシングルトンにイベントを追加しても問題ありません)に関係なく、

スレッドが別のスレッドの指示どおりに動作するようにする必要がある場合は、そのインテントをデータと通信する必要があります。たとえば、各スレッドはブロッキングキューを設定し、アイテムが他のスレッドによってキューにプッシュされるのを待ちます。これらのアイテムは、デリゲート、オブジェクト、またはアクションを実行する前に解釈が必要な純粋なデータアイテムです。重要なことは、スレッド内でアクションが発生するためには、スレッド自体がそのアクションを実行する必要があることです。

+0

私は完全に同意します.net 4の新しいConcurrentQueueは完璧です。 http://msdn.microsoft.com/en-us/library/dd267265.aspx。各スレッドには、読み込む独自のキューが必要です。スケジューラー・スレッドがワーカー・スレッド用に特別な作業を割り当てたい場合。私は本当にスレッドの使い方を考え、タスクをもっと見ていきます。 – NPehrsson

関連する問題