2009-06-08 7 views
4

.NET (C#)을 사용 중입니다. 동시에 T2에서 다른 스레드에서 하나의 스레드 깨우기

while (true) 
{ 
    dosomething(); //this is a very fast operation 
    sleep(5 seconds); 
} 

그것이 T1에게 그 같은 킥을 줄 필요가 시간이 수 그러나 시간이 전혀 다른 일을하고있다 :

내가 T1 및 T2와 T1을 실행하는 두 스레드가있는 경우는 다음과 같이이다 수면 시간이 길지 않아도 잠에서 깨어납니다. 어떻게해야합니까?

+0

위 AutoResetEvent를 추가, 당신은 T1이 5 초 말까지 스케줄러의 관심을 얻을 것이다 정말 확실하지 않다. 이런 종류의 가정에 지나치게 의존하지 마십시오! 이전에 스레드를 깨우면 이전에 작업을 수행 할 수있는 가능성이 있지만 성공할 수도 있고하지 않을 수도 있습니다. – NicDumZ

답변

12

ManualResetEvent (또는 AutoResetEvent)과 같은 WaitHandle을 사용하십시오.

private ManualResetEvent myEvent = new ManualResetEvent(false); 

Thread1 :

while(true) { 
    doSomething(); 
    myEvent.WaitOne(5000); 
    myEvent.Reset(); 
} 

Thread2 : 클래스에서

이하는으로 ManualResetEvent를 선언

myEvent.Set(); 

Thread1 5 초 동안 또는으로 ManualResetEvent이 설정 될 때까지 기다릴 것이다, 뭐든지 가장 먼저 온것.

편집가 : T1이 5 초 만료 전에 깨울 경우에도, 그런데

+1

이 경우 'AutoResetEvent'를 사용하는 것이 더 좋을 수 있으므로 'WaitOne 직후에 T2 신호가 발생하면 어떻게됩니까?'와 같은 질문이 필요합니다. 대답 할 필요가 없습니다 ... – jerryjvl

+0

동의합니다. AutoResetEvent는 아마도 더 간단 할 것입니다. –

0

이렇게하려면 스레드를 잠자기 모드로 설정하지 마십시오. 봐 this 그래서 질문을보십시오. 또한 this 블로그 항목이 유망 해 보인다.

GOOGLE에 대한 자세한 정보를 원한다면 .NET의 "thread signaling"이나 그와 비슷한 것을 검색 할 수 있습니다.

관련 문제