2012-02-06 29 views
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)setMethod2と呼んでもらえませんか?タイムアウトの場合は?スレッド#1に何か問題があるのでしょうか?

+0

なぜタイムアウト後もイベントを設定したくないのはなぜですか? Method2は何かがMethod1の準備ができていることを知らせていませんか?おそらく、あなたが達成しようとしていることを説明したら... –

+0

'Method2()'は、タイムアウト後に呼び出されているかどうかを知りません。問題があるさて、私は時間を監視し、タイムアウトかどうかを知るために 'bool'変数を設定することができます。しかし、 'bool'値に基づいて' Set() 'を呼び出すことはできますか?私はそれが開いているハンドルや何かを残したい場合は電話しないでください? – user1178376

答えて

2

待っているハンドルが常にリセットされてから待機するのはなぜですか?

public void Method1() 
{ 
    // Reset the wait handle I'll be using... 
    MyWaitHandle.Reset(); 

    //do something 
    //wait for the signal or timeout 
    MyWaitHandle.WaitOne(10000); 
    //do something else on receiving signal or after timeout 
} 
関連する問題