2011-06-21 8 views
0

すべて、C#でのスレッドの停止が無制限の待機モードである

私はすべて同じメソッドを実行する10個のスレッドを作成するメインスレッドを持っています。 このメソッドの内部にはメッセージキューへの接続があり、各スレッドはメッセージが到着するまで無制限に待機します。しかし、私が望むならばスレッドを死ぬように指示する機能が必要です。どうしたらいいですか?ここで

は一例です:

void ExecuteThread(){ 
//run some stuff 
//listen to a message queue 
//Here wait unlimited until a message arrives 
} 

私はスレッドを停止するために無制限のwaitコマンドである上記のコードを通知するにはどうすればよいですか? キューから正常に切断するために、私はそれを中断できません。

多くのおかげで、 MK

}

+1

は、あなたは中止することができないと言うが、あなたがスレッド方式で/キャッチを試してみて、そこにクリーンアップをやって、 'ThreadAbortException'をキャッチした場合、それはトリックをしないだろうか? –

+0

どのバージョンの.netを使用していますか? – marto

答えて

0

は、通常は共有変数をチェックする待機ループを作成する必要があります。この変数は、スレッドが操作をキャンセルする必要があるかどうかを示します。

警告:変数を頻繁にチェックする無限ループを作成しないでください。これにより、「ビジー待機」が発生します。タイムアウトが到着するまで、キュー内のメッセージを待つ必要があります。タイムアウト後、制御変数を確認し、キューの待機プロセスを再度入力できます。

1

無制限に待つのではなく、タイムアウトでWaitOneを使用します。これをループに入れて、取り消すフラグをチェックします。次に、あなたのメインスレッドから、スレッドの終了を知らせることができます。

(擬似コード)のような何か:メッセージキューの

while (keepRunning) 
{ 
    //wait 5 seconds for message 
} 
+0

いいね...私はそれを実装しようとします – koumides

1

どのような?あなたのメインスレッドは、待ち行列に自殺メッセージ(10個の自殺メッセージ、または内部カウント付きの自殺メッセージ)を送信できますか?

RGDSは、 マーティン

+0

私は実際にそれについて考えましたが、おそらく非常にきれいな解決策ではありません... – koumides

+0

これは、連続したタイムアウトよりも、よりクリーンでCPU効率が高く、自分のスレッド/メッセージを送信して、何かをするように指示しているので、自殺の要求とはどう違うのですか? –

関連する問題