C# 프로그래밍 기초 실습 전자책
ManualResetEvent 클래스

ManualResetEvent는 하나의 쓰레드만 통과시키고 닫는 AutoResetEvent와 달리, 한번 열리면 대기중이던 모든 쓰레드를 실행하게 하고 코드에서 수동으로 Reset()을 호출하여 문을 닫고 이후 도착한 쓰레드들을 다시 대기토록 한다. 아래는 여러 쓰레드의 실행을 중지시킨 후, ManualResetEvent로 신호를 보내 대기중이던 모든 쓰레들들을 한꺼번에 실행시키는 예제이다.

예제

using System;
using System.Threading;

namespace MultiThrdApp
{
    class Program
    {
        // ManualResetEvent 객체 필드
        static ManualResetEvent manualEvent = new ManualResetEvent(false);

        static void Main()
        {
            // 10개의 쓰레드 생성
            // 10개 쓰레드 모두 manualEvent.WaitOne(); 에서
            // 실행 중지후 대기중
            for (int i = 0; i < 10; i++)
            {
                new Thread(Run).Start(i);
            }

            // 메인쓰레드            
            Thread.Sleep(3000);

            // ManualResetEvent 객체 Set() 호출
            // 10개 쓰레드 모두 실행 계속함.
            manualEvent.Set(); 
        }

        static void Run(object id)
        {            
            Console.WriteLine("{0} in Wait", id);

            // ManualResetEvent 신호 대기
            manualEvent.WaitOne();                        

            Console.WriteLine("{0}: Done", id);
        }
    }
}



테스드 결과


본 웹사이트는 광고를 포함하고 있습니다. 광고 클릭에서 발생하는 수익금은 모두 웹사이트 서버의 유지 및 관리, 그리고 기술 콘텐츠 향상을 위해 쓰여집니다.




Comment ysoo900@*** 2/13/2017 6:24:29 AM
Comment admin@*** 2/13/2017 5:32:45 PM
Comment lovedangyou@*** 8/8/2017 9:25:01 AM
Comment admin@*** 8/8/2017 2:17:00 PM

Comment 의견/코멘트 쓰기
이메일
 *정확한 이메일이 아닐 경우 삭제될 수 있습니다
의견/코멘트
좌측의 3자리 문자들을 입력해 주십시오





아티클 모바일 링크
C# 스터디 소셜미디어
쉽게 배우는 파이썬 기초