Event WaitHandle 자신의 매듭

3933 단어 event
이벤트웨이트핸들 대상자가 후송입이 종료 상태인지, 수동 또는 자동인지 실태가 잘 알려지지 않아 검토해 필기를 했다.
EventWaitHandle은 각 스레드 간에 서로 신호를 주고받는다.
우선: 이벤트가 처음에 종료 상태일 경우, 첫 번째waitone () 때는 라인 막힘을 하지 않고, 비 종료 상태일 때, 첫 번째waitone () 때는 라인 막힘을 합니다.물론 이 상태도 결합된 이벤트레스트모드의 값을 결합해서 사용해야 한다.
 EventResetMode.AutoReset 자동 재설정, 즉 이벤트 상태를 자동으로 재설정합니다. 자동이면 첫 번째 waitone 이후 이벤트를 비종료 상태로 변경합니다.이와 같이 {수동으로 이벤트를 초기화하여 종료 상태로 초기화하면 첫 번째waitone () 은 루틴을 막지 않지만, 이벤트 상태를 비종료 상태로 즉시 변경합니다. 이후waitone () 는 루틴을 막습니다}
EventResetMode.ManualReset은 수동으로 리셋합니다. 스레드의 막힘에 대해 이전 매개 변수가 종료 상태인지 여부를 결정합니다. 즉, 초기값이 종료 상태로 설정되면 스레드가 수동으로 설정되지 않으면 스레드 막힘을 하지 않습니다. 초기값이 비종료 상태이면 모든 웨이온 () 이 막힙니다.set () 같은 방법을 수동으로 사용해서 종료 상태로 설정하지 않으면
다음은 코드 예입니다.
    class Program
    {
        //static EventWaitHandle wait = new EventWaitHandle(true, EventResetMode.AutoReset);  //        
        
        static EventWaitHandle waitM = new EventWaitHandle(false, EventResetMode.ManualReset);//          
        static void Main(string[] args)
        {
            Console.WriteLine("1    " + DateTime.Now);
            Thread thread = new Thread(S);
            thread.Start();

            Thread.Sleep(3000);
            //wait.Set();//
            waitM.Set();   //
            Console.Read();
        }
        public static void S()
        {
            waitM.WaitOne(3000);   //     ,       ,            
           //wait.WaitOne();  //         ,     ,     
            Console.WriteLine("2    " + DateTime.Now);

           waitM.WaitOne(3000);  //   set()         ,     
           //  wait.WaitOne(3000);  //
            Console.WriteLine("3    " + DateTime.Now);

        }
    }

 

좋은 웹페이지 즐겨찾기