2011-04-26 6 views
3

스레드를 중지해야하지만 8 초 동안 잠자기하고 중단해야하는 경우 8 초 동안 계속 잠시 멈추고 중지됩니다.잠자는 동안 스레드를 중단하는 방법

+1

here 중 또는 수면 후에 중단 여부를 중요합니까를 찾을 수 있습니까? –

+0

깨어 났다고 생각 했습니까? 즉. 잠에서 빠져 나올 무언가를 사용해서? –

+0

스레드를 중단하는 것은 * 정말 * 좋은 생각입니다. http://stackoverflow.com/questions/1559255/whats-wrong-with-using-thread-abort –

답변

6

잠 들어있는 동안 스레드를 (안전하게) 중단 할 수 없습니다. 차단이 완료되면 즉시 중단 조건을 확인하고 그 시점에서 종료해야합니다.

차단 된 상태에서 스레드가 사용하는 리소스가 거의 없으므로 대부분의 경우 이러한 단점이 없습니다.

더 빨리 "중단"해야하는 경우 대신 다른 메커니즘을 사용하여 차단할 수 있습니다. 잠자는 것은 거의 올바른 옵션이 아닙니다. 대기 핸들은 동일한 기능을 제공하고 다른 스레드가 즉시 차단을 중지해야 함을 알리는 수단을 제공 할 수 있습니다.

2

사용은 AutoResetEvent timed Wait 대신 Sleep, 그렇지 않으면 타이머가 만료, 당신은 대기중인 스레드를 중단하고자 할 때 Set를 사용하여 AutoResetEvent 신호.

12

사용하십시오 ManualResetEvent :

다른
ManualResetEvent mre=new ManualResetEvent(false); 
//...... 
var signalled=mre.WaitOne(TimeSpan.FromSeconds(8)); 
if(!signalled) 
{ 
    //timeout occurred 
} 

(8 초까지 전에) :

mre.Set(); //unfreezes paused Thread and causes signalled==true 

를하고 차단을 해제 스레드가 정상적으로 종료 할 수 있습니다. Thread.Abortevil and should be avoided입니다.

+0

+1'잠'은 거의 필요하지 않습니다. –

5

System.Timers.Timer 클래스 사용을 고려하십시오. 필요한 경우 중지 할 수있는 타이머입니다.

당신은 좋은 지침

관련 문제