2011-05-16 5 views
1
static readonly System.Timers.Timer _timer = new System.Timers.Timer(); 

static void Main(string[] args) 
{ 
    _timer.Interval = 1000; 
    _timer.Elapsed += new System.Timers.ElapsedEventHandler(Timer_Elapsed); 
    _timer.Start(); 

    Console.WriteLine("Press any key to exit..."); 
    Console.ReadKey(); 
} 

static void Timer_Elapsed(object sender, System.Timers.ElapsedEventArgs e) 
{ 
    Console.WriteLine(DateTime.Now); 
    Thread.Sleep(600000); // 10 minutes 
    Console.WriteLine(DateTime.Now); 
} 

이렇게 긴 수면 타이머 스레드는 어떻게됩니까? 스레드 풀로 돌아가거나 많은 수면 스레드를 끝낼 수 있습니까?타이머 스레드가 절전 모드로 전환 될 때 발생하는 현상

+0

? "타이머 스레드가 절전 모드로 전환하면 어떻게됩니까" - 너는 "버니 바나나 간다"라는 말을 그만 둘 수 있습니다. 그것에! ;) –

답변

3

수면 스레드는 스레드 풀로 되돌아 가지 만, 수면이 끝난 후에 만 ​​이 끝납니다. 쓰레드 풀은 최대 쓰레드 수를 가지고 있기 때문에, 쓰레드가 모두 쓰러져서 쓰레드가 부족할 수있다.

편집 :

스레드 풀 문서 :

http://msdn.microsoft.com/en-us/library/system.threading.threadpool.getmaxthreads.aspx

+0

하지만 '작업 관리자'에서이 응용 프로그램의 스레드 수는 30이며 시간이 지남에 따라 변경되지 않습니다. – Xaqron

+0

이것은 스레드 풀 최대 스레드 때문입니다. 모든 스레드가 대기 상태이므로 스레드 풀 요청이 대기 할 때까지 스레드에 대한 새로운 요청이 대기열에 남아 있습니다. ThreadPool의 문서를보십시오. 나는 링크를 포함시킬 답을 편집했다. –

관련 문제