2009-11-28 3 views
1

가능한 중복 :ASP.NET/C# 이벤트 차이

으로 ManualResetEvent과 AutoResetEvent의 차이점은 무엇입니까 What is the difference ManualResetEvent and AutoResetEvent in .net?? (예가 도움이 될 수 있음).

+0

@ Fredrik. Jon이 완료하도록하십시오. 그의 예. 그럼 닫아. – Udana

+0

@Udana : 나는 스스로 질문을 마무리 할 힘이 없다. 걱정 마. 또한 다른 질문에 코드 샘플이 없으므로이 질문에 대한 답변을 통해 추가 정보를 얻을 수 있다고 말했을 것입니다. –

답변

4

ManualResetEvent은 마치 문이 열리면 누군가가 문을 닫을 때까지 사람들을 관통시킵니다.

AutoResetEvent는 기차역의 개찰구와 같습니다. 일단 티켓을 넣으면 사람이 통과 할 수 있지만 한 명만 통과 할 수 있습니다.

다음은 예입니다. 5 개의 스레드가 모두 동일한 이벤트를 기다리고 있으며, 초당 1 회 설정됩니다. 수동 재설정 이벤트 인 경우 모두 스레드는 한 번 설정되면 바로 "게이트를 통과합니다". 자동 재설정 이벤트에서는 한 번에 하나만 이동합니다. ManualResetEvent에 대한

using System; 
using System.Threading; 

class Test 
{ 
    static void Main() 
    { 
     // Change to AutoResetEvent to see different behaviour 
     EventWaitHandle waitHandle = new ManualResetEvent(false); 

     for (int i = 0; i < 5; i++) 
     { 
      int threadNumber = i; 
      new Thread(() => WaitFor(threadNumber, waitHandle)).Start(); 
     } 
     // Wait for all the threads to have started 
     Thread.Sleep(500); 

     // Now release the handle three times, waiting a 
     // second between each time 
     for (int i = 0; i < 3; i++) 
     { 
      Console.WriteLine("Main thread setting"); 
      waitHandle.Set(); 
      Thread.Sleep(1000); 
     } 
    } 

    static void WaitFor(int threadNumber, EventWaitHandle waitHandle) 
    { 
     Console.WriteLine("Thread {0} waiting", threadNumber); 
     waitHandle.WaitOne(); 
     Console.WriteLine("Thread {0} finished", threadNumber);   
    } 
} 

샘플 출력 :

Thread 0 waiting 
Thread 4 waiting 
Thread 1 waiting 
Thread 2 waiting 
Thread 3 waiting 
Main thread setting 
Thread 2 finished 
Thread 1 finished 
Thread 0 finished 
Thread 4 finished 
Thread 3 finished 
Main thread setting 
Main thread setting 

샘플 출력 AutoResetEvent에 대한 :

Thread 0 waiting 
Thread 1 waiting 
Thread 2 waiting 
Thread 3 waiting 
Thread 4 waiting 
Main thread setting 
Thread 3 finished 
Main thread setting 
Thread 2 finished 
Main thread setting 
Thread 1 finished 

(이벤트로 여전히 기다리고있는 두 개의 스레드가 같은 프로그램은 다음 그냥 응답 설정하고 아무 것도 설정하지 않습니다.)

+0

예 귀하의 예를 기다리고 있습니다. – Udana

+0

좋은 예 Mr. Jon. – Udana