1
MSDNから "待機中のスレッドがない場合、スレッドが待機しようとするまで、またはReset
メソッドが呼び出されるまで、待機ハンドルは通知されたままになります。AutoResetEvent Setがタイムアウト後に呼び出される
EventWaitHandle MyWaitHandle = new AutoResetEvent(false);
スレッド#1:
public void Method1()
{
//do something
//wait for the signal or timeout
MyWaitHandle.WaitOne(10000);
//do something else on receiving signal or after timeout
}
スレッド#2:
//this would be called when there is a response from the external app
public void Method2()
{
//do something
//send the signal to waiting thread
MyWaitHandle.Set();
}
私のアプリケーションのスレッド#1には、外部のアプリケーションに要求を提出し、信号やタイムアウトを待っています。応答が外部アプリから受信された場合、スレッド#2は待機ハンドルを設定します。このset
は、タイムアウト後も呼び出すことができます。私の質問は
です)1)シグナルを設定するタイムアウトの後にMethod2
が呼び出される可能性が非常に高いです。将来、スレッド#1へのリクエストがある場合はいつでも、WaitOne(10000)
は効果がなく、すぐにリリースされるでしょうか?
2)set
をMethod2
と呼んでもらえませんか?タイムアウトの場合は?スレッド#1に何か問題があるのでしょうか?
なぜタイムアウト後もイベントを設定したくないのはなぜですか? Method2は何かがMethod1の準備ができていることを知らせていませんか?おそらく、あなたが達成しようとしていることを説明したら... –
'Method2()'は、タイムアウト後に呼び出されているかどうかを知りません。問題があるさて、私は時間を監視し、タイムアウトかどうかを知るために 'bool'変数を設定することができます。しかし、 'bool'値に基づいて' Set() 'を呼び出すことはできますか?私はそれが開いているハンドルや何かを残したい場合は電話しないでください? – user1178376