ManualResetEvent 클래스
TOC
콘텐츠의 테이블 축소
콘텐츠의 테이블 확장
이 문서는 기계로 번역한 것입니다. 원본 텍스트를 보려면 포인터를 문서의 문장 위로 올리십시오. 추가 정보
번역
원본

ManualResetEvent 클래스

 

하나 이상의 대기 중인 스레드에 이벤트가 발생했음을 알립니다.이 클래스는 상속될 수 없습니다.

네임스페이스:   System.Threading
어셈블리:  mscorlib.dll의 mscorlib


[ComVisibleAttribute(true)]
[HostProtectionAttribute(SecurityAction.LinkDemand, Synchronization = true, 
	ExternalThreading = true)]
public sealed class ManualResetEvent : EventWaitHandle

이름설명
System_CAPS_pubmethodManualResetEvent(Boolean)

초기 상태를 신호 받음으로 설정할지 여부를 나타내는 부울 값을 사용하여 ManualResetEvent 클래스의 새 인스턴스를 초기화합니다.

이름설명
System_CAPS_pubpropertyHandle

사용되지 않습니다.네이티브 운영 체제 핸들을 가져오거나 설정합니다.(WaitHandle에서 상속됨.)

System_CAPS_pubpropertySafeWaitHandle

네이티브 운영 체제 핸들을 가져오거나 설정합니다.(WaitHandle에서 상속됨.)

이름설명
System_CAPS_pubmethodClose()

현재 WaitHandle에서 보유한 모든 리소스를 해제합니다.(WaitHandle에서 상속됨.)

System_CAPS_pubmethodCreateObjRef(Type)

원격 개체와 통신하는 데 사용되는 프록시 생성에 필요한 모든 관련 정보가 들어 있는 개체를 만듭니다.(MarshalByRefObject에서 상속됨.)

System_CAPS_pubmethodDispose()

WaitHandle 클래스의 현재 인스턴스에서 사용하는 모든 리소스를 해제합니다.(WaitHandle에서 상속됨.)

System_CAPS_pubmethodEquals(Object)

지정한 개체가 현재 개체와 같은지 여부를 확인합니다. (Object에서 상속됨.)

System_CAPS_pubmethodGetAccessControl()

현재 EventWaitHandle 개체로 표시되는 명명된 시스템 이벤트에 대한 액세스 제어 보안을 나타내는 EventWaitHandleSecurity 개체를 가져옵니다.(EventWaitHandle에서 상속됨.)

System_CAPS_pubmethodGetHashCode()

기본 해시 함수로 작동합니다. (Object에서 상속됨.)

System_CAPS_pubmethodGetLifetimeService()

이 인스턴스의 수명 정책을 제어하는 현재의 수명 서비스 개체를 검색합니다.(MarshalByRefObject에서 상속됨.)

System_CAPS_pubmethodGetType()

현재 인스턴스의 Type을 가져옵니다.(Object에서 상속됨.)

System_CAPS_pubmethodInitializeLifetimeService()

이 인스턴스의 수명 정책을 제어하기 위한 수명 서비스 개체를 가져옵니다.(MarshalByRefObject에서 상속됨.)

System_CAPS_pubmethodReset()

스레드가 차단되도록 이벤트 상태를 신호 없음으로 설정합니다.(EventWaitHandle에서 상속됨.)

System_CAPS_pubmethodSet()

하나 이상의 대기 중인 스레드가 계속 진행되도록 이벤트 상태를 신호 받음으로 설정합니다.(EventWaitHandle에서 상속됨.)

System_CAPS_pubmethodSetAccessControl(EventWaitHandleSecurity)

명명된 시스템 이벤트에 대한 액세스 제어 보안을 설정합니다.(EventWaitHandle에서 상속됨.)

System_CAPS_pubmethodToString()

현재 개체를 나타내는 문자열을 반환합니다.(Object에서 상속됨.)

System_CAPS_pubmethodWaitOne()

현재 WaitHandle이(가) 신호를 받을 때까지 현재 스레드를 차단합니다.(WaitHandle에서 상속됨.)

System_CAPS_pubmethodWaitOne(Int32)

부호 있는 32비트 정수로 시간 간격(밀리초)을 지정하여 현재 WaitHandle이 신호를 받을 때까지 현재 스레드를 차단합니다.(WaitHandle에서 상속됨.)

System_CAPS_pubmethodWaitOne(Int32, Boolean)

부호 있는 32비트 정수로 시간 간격을 지정하고 대기 전에 동기화 도메인을 끝낼지 여부를 지정하여 현재 WaitHandle이 신호를 받을 때까지 현재 스레드를 차단합니다.(WaitHandle에서 상속됨.)

System_CAPS_pubmethodWaitOne(TimeSpan)

TimeSpan로 시간 간격을 지정하여 현재 인스턴스가 신호를 받을 때까지 현재 스레드를 차단합니다.(WaitHandle에서 상속됨.)

System_CAPS_pubmethodWaitOne(TimeSpan, Boolean)

TimeSpan로 시간 간격을 지정하고 대기 전에 동기화 도메인을 끝낼지 여부를 지정하여 현재 인스턴스가 신호를 받을 때까지 현재 스레드를 차단합니다.(WaitHandle에서 상속됨.)

이름설명
System_CAPS_pubmethodGetSafeWaitHandle()

네이티브 운영 체제 대기 핸들에 대 한 안전한 핸들을 가져옵니다. (WaitHandleExtensions에 의해 정의됨)

System_CAPS_pubmethodSetSafeWaitHandle(SafeWaitHandle)

기본 운영 체제 대기 핸들에 대 한 안전한 핸들을 설정합니다. (WaitHandleExtensions에 의해 정의됨)

.NET Framework 버전 2.0에서는 ManualResetEvent가 새 EventWaitHandle 클래스에서 파생됩니다. ManualResetEventEventResetMode.ManualReset을 사용하여 만든 EventWaitHandle과 기능이 같습니다.

System_CAPS_note참고

ManualResetEvent 클래스와는 달리 EventWaitHandle 클래스는 명명된 시스템 동기화 이벤트에 대한 액세스를 제공합니다.

ManualResetEvent를 사용하여 스레드는 신호를 보냄으로써 서로 통신할 수 있습니다.일반적으로 이 통신은 다른 스레드가 처리되기 위해 먼저 하나의 스레드가 완료해야 하는 작업과 관련이 있습니다.

하나의 스레드에서 다른 스레드의 처리를 위해 먼저 완료되어야 하는 작업을 시작할 때 Reset을 호출하여 ManualResetEvent를 신호 없음 상태로 설정합니다.이 스레드는 ManualResetEvent를 제어하는 것으로 간주될 수 있습니다. ManualResetEvent에 대해 WaitOne을 호출하는 스레드는 차단되며 신호를 기다립니다.제어 스레드는 해당 작업을 끝나면 Set을 호출하여 대기 중인 스레드가 계속될 수 있음을 알립니다.대기 중인 모든 스레드는 해제됩니다.

일단 신호 받음 상태가 되면 ManualResetEvent는 수동으로 다시 설정될 때까지 신호 받음 상태로 남아 있습니다.즉, WaitOne 호출이 즉시 반환됩니다.

초기 상태가 통보될 경우 부울 값 true를, 그렇지 않을 경우 false를 생성자에게 전달하여 ManualResetEvent의 초기 상태를 제어할 수 있습니다.

ManualResetEventstaticWaitAllWaitAny 메서드와 함께 사용할 수도 있습니다.

스레드 동기화 메커니즘에 대한 자세한 내용은 개념 설명서에서 ManualResetEvent and ManualResetEventSlim를 참조하십시오.

다음 예제에서는 ManualResetEvent가 동작하는 방법을 보여 줍니다.이 예제는 신호를 보내지 않은 상태에서 ManualResetEvent를 시작합니다(즉, false가 생성자로 전달됩니다).이 예제에서는 세 가지 스레드를 만들고, 각 스레드는 M:System.Threading.EventWaitHandle.WaitOne 메서드를 호출하여 ManualResetEvent에서 차단됩니다. Enter 키를 누르면 예제는 세 개의 스레드를 릴리스하는 Set 메서드를 호출합니다.스레드를 한 번에 하나씩 릴리스하면서 매번 릴리스할 때마다 자동으로 재설정되는 AutoResetEvent 클래스의 동작과 이것을 비교합니다.

Enter 키를 다시 누르면 Reset 메서드를 호출할 때까지 ManualResetEvent가 부호 있는 상태에 있다는 것을 보여 줍니다. 예제는 두 스레드를 더 시작합니다. M:System.Threading.EventWaitHandle.WaitOne 메서드를 호출하지만 대신 실행이 완료되지 않을 때 이러한 스레드를 차단하지 않습니다.

Enter 키를 다시 누르면 예제에서 Reset 메서드를 호출하고 M:System.Threading.EventWaitHandle.WaitOne를 호출할 경우 차단되는 또 하나의 스레드를 시작합니다.마지막에 Enter 키를 누르면 Set가 호출되어 마지막 스레드가 릴리스되고 프로그램이 종료합니다.

using System;
using System.Threading;

public class Example
{
    // mre is used to block and release threads manually. It is
    // created in the unsignaled state.
    private static ManualResetEvent mre = new ManualResetEvent(false);

    static void Main()
    {
        Console.WriteLine("\nStart 3 named threads that block on a ManualResetEvent:\n");

        for(int i = 0; i <= 2; i++)
        {
            Thread t = new Thread(ThreadProc);
            t.Name = "Thread_" + i;
            t.Start();
        }

        Thread.Sleep(500);
        Console.WriteLine("\nWhen all three threads have started, press Enter to call Set()" +
                          "\nto release all the threads.\n");
        Console.ReadLine();

        mre.Set();

        Thread.Sleep(500);
        Console.WriteLine("\nWhen a ManualResetEvent is signaled, threads that call WaitOne()" +
                          "\ndo not block. Press Enter to show this.\n");
        Console.ReadLine();

        for(int i = 3; i <= 4; i++)
        {
            Thread t = new Thread(ThreadProc);
            t.Name = "Thread_" + i;
            t.Start();
        }

        Thread.Sleep(500);
        Console.WriteLine("\nPress Enter to call Reset(), so that threads once again block" +
                          "\nwhen they call WaitOne().\n");
        Console.ReadLine();

        mre.Reset();

        // Start a thread that waits on the ManualResetEvent.
        Thread t5 = new Thread(ThreadProc);
        t5.Name = "Thread_5";
        t5.Start();

        Thread.Sleep(500);
        Console.WriteLine("\nPress Enter to call Set() and conclude the demo.");
        Console.ReadLine();

        mre.Set();

        // If you run this example in Visual Studio, uncomment the following line:
        //Console.ReadLine();
    }


    private static void ThreadProc()
    {
        string name = Thread.CurrentThread.Name;

        Console.WriteLine(name + " starts and calls mre.WaitOne()");

        mre.WaitOne();

        Console.WriteLine(name + " ends.");
    }
}

/* This example produces output similar to the following:

Start 3 named threads that block on a ManualResetEvent:

Thread_0 starts and calls mre.WaitOne()
Thread_1 starts and calls mre.WaitOne()
Thread_2 starts and calls mre.WaitOne()

When all three threads have started, press Enter to call Set()
to release all the threads.


Thread_2 ends.
Thread_0 ends.
Thread_1 ends.

When a ManualResetEvent is signaled, threads that call WaitOne()
do not block. Press Enter to show this.


Thread_3 starts and calls mre.WaitOne()
Thread_3 ends.
Thread_4 starts and calls mre.WaitOne()
Thread_4 ends.

Press Enter to call Reset(), so that threads once again block
when they call WaitOne().


Thread_5 starts and calls mre.WaitOne()

Press Enter to call Set() and conclude the demo.

Thread_5 ends.
 */

Universal Windows Platform
4.5 이후에 사용 가능
.NET Framework
1.1 이후에 사용 가능
Portable Class Library
portable .NET platforms에서 지원 portable .NET platforms
Silverlight
2.0 이후에 사용 가능
Windows Phone Silverlight
7.0 이후에 사용 가능
Windows Phone
8.1 이후에 사용 가능

이 클래스는 스레드로부터 안전합니다.

맨 위로 이동
표시:
© 2016 Microsoft