2012-02-06 2 views
1

MSDN에서 "대기중인 스레드가 없으면 스레드에서 스레드가 대기하거나 해당 Reset 메서드가 호출 될 때까지 대기 핸들이 유지됩니다."AutoResetEvent 집합이 제한 시간 후에 호출 됨

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 : 내 응용 프로그램 스레드 # 1에서

//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(); 
} 

외부 응용 프로그램에 요청을 제출하고, 신호 또는 제한 시간을 기다리고 있습니다. 외부 앱 Thread # 2로부터 응답을 받으면 대기 핸들을 설정합니다. 이 set은 시간 초과 후에도 호출 할 수 있습니다. 내 질문은

입니다. 1) 신호를 설정하는 시간 초과 후 Method2을 호출 할 가능성이 큽니다. 앞으로 Thread # 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 
}