2012-01-09 14 views
1

これはおそらく異例の質問です。典型的な.NET開発では、ブール値をManualResetEventに置き換えることを決して推奨しません。この場合、別のスレッドへの接続状態を示すために、すでにManualResetEventが必要です。同じ意味意味を持つブール値の使用は冗長であることが私にはわかります。ManualResetEventを使用してブール値を代用することができます

OK、仕様:

  • "クライアント" は
  • "受信者" 接続

「クライアントを接続:私は、次の条件に該当する場合、メッセージを処理しなければならないワーカースレッドを持っています"および"受信者 "接続は、他のスレッドが監視しているTCPソケットです。いずれかの接続状態が変化すると、対応するWaitHandleが設定(接続)またはリセット(切断)されます。

元は、(UIの)接続状態を示すブール値がありました。 WaitHandlesを使ってワーカースレッドに信号を送るようになったので、ブールステート変数を完全に削除してWaitHandlesを使うと便利です。

waitEvent.WaitOne(0) 

(スレッドセーフ動作の付加的な利点を有する)を示すブール値を試験することが機能的に同一の製造、ブロッキングなしハンドルの状態を返します。

私は既にWaitHandlesを使用していますが、状態(同じ意味の意味)を2つの異なる変数に保つという考えが嫌いです。私はちょうどWaitHandlesを使用しますか?私が考えることができる最も重要な反論は、実行時パフォーマンスです。ブール値をテストする時間とWaitHandleをテストする時間。私はパフォーマンスが大きく影響を受けるとは思わない。

ここに重要な情報がありません。

ありがとうございます!

答えて

0

ただManualResetEventを使用する利点は、同じ状態をトラッキングする変数が1つしかないことです。しかし、あなたが言及したように、状態を読み返すためのオーバーヘッドがあります。

このオーバーヘッドが2つの場所で同じ状態を追跡し、同期が外れる危険性があるかどうかを確認する必要があります。

+0

私の考えは正確です。他のすべてのものは同等ですが、ランタイムパフォーマンスの違いは、今から6〜12ヶ月後に更新しているときにデザインを台無しにするリスクがないと考える傾向があります。 –

+0

あなた自身の質問にあなたが答えたと思います。私の答えや何かのために余分な担当者を得ることは心配しないでください:) – FMM

+0

しかし、私は何かが欠けていた場合にそれが "健全性チェック"の価値があると思った。独立した開発者として、経験豊かな他の開発者とアーキテクチャを垣間見る機会を逃してしまうことがよくあります。あなたは余分な担当者を獲得しました。 –

0

複数の方法があります。これらのケースの1つです。ブール値を正しく使用すると仮定しても違いはありません。 1つの考慮事項はメモリ(オブジェクトはブール値よりも多くを要する)ですが、最も可能性は低いです。いずれかの私がお勧めしますが、イベントを通知するためにスレッディングを使用しているので、WaitHandlesはこれが何をするように設計されているかを示唆しています。

関連する問題