다음을 통해 공유


다중 스레딩: 사용자 인터페이스 스레드 만들기

사용자 인터페이스 스레드는 일반적으로 응용 프로그램의 다른 부분을 실행하는 스레드와 별개로 사용자 입력을 처리하고 사용자 이벤트에 응답하는 데 사용됩니다. 주 응용 프로그램 스레드(CWinApp 파생 클래스에서 제공)가 이미 만들어져서 시작됩니다. 이 항목에서는 추가 사용자 인터페이스 스레드를 만드는 데 필요한 단계에 대해 설명합니다.

사용자 인터페이스 스레드를 만드는 경우 제일 먼저 CWinThread에서 클래스를 파생시켜야 합니다. DECLARE_DYNCREATEIMPLEMENT_DYNCREATE 매크로를 사용하여 이 클래스를 선언하고 구현해야 합니다. 이 클래스는 일부 함수를 재정의해야 하고 다른 함수를 재정의할 수도 있습니다. 다음 표에서는 함수 및 해당 함수의 용도에 대해 설명합니다.

사용자 인터페이스 스레드를 만들 때 재정의할 함수

Function

용도

ExitInstance

스레드가 종료되면 정리 작업을 수행하며 일반적으로 재정의됩니다.

InitInstance

스레드 인스턴스 초기화를 수행하며 재정의해야 합니다.

OnIdle

스레드별 유휴 시간 처리를 수행하며 일반적으로 재정의되지 않습니다.

PreTranslateMessage

메시지를 TranslateMessageDispatchMessage에 디스패치하기 전에 필터링하며 일반적으로 재정의되지 않습니다.

ProcessWndProcException

스레드의 메시지와 명령 처리기에서 throw된 처리되지 않는 예외를 가로채며 일반적으로 재정의되지 않습니다.

실행

스레드에 대한 제어 함수이며 메시지 펌프를 포함합니다. 대부분 재정의되지 않습니다.

MFC는 매개 변수 오버로드를 통해 AfxBeginThread를 사용자 인터페이스 스레드용과 작업자 스레드용 두 가지 경우로 사용합니다. 사용자 인터페이스 스레드를 시작하려면 다음과 같은 정보를 제공하여 AfxBeginThread를 호출합니다.

  • CWinThread에서 파생한 클래스의 RUNTIME_CLASS

  • (선택적 요소) 원하는 우선 순위 수준. 기본값은 보통 우선 순위입니다. 사용할 수 있는 우선 순위 수준에 대한 자세한 내용은 Windows SDK의 SetThreadPriority를 참조하십시오.

  • (선택적 요소) 스레드의 원하는 스택 크기. 기본값은 만드는 스레드와 스택의 크기가 동일합니다.

  • (선택적 요소) 일시 중단된 상태에서 스레드가 만들어지기를 원하는 경우 CREATE_SUSPENDED. 기본값은 0이며, 0이 아니면 스레드가 정상적으로 시작됩니다.

  • (선택적 요소) 원하는 보안 특성. 기본값은 부모 스레드와 동일한 액세스입니다. 보안 정보 형식에 대한 자세한 내용은 Windows SDK의 SECURITY_ATTRIBUTES를 참조하십시오.

AfxBeginThread는 사용자 대신 대부분의 작업을 수행합니다. 클래스의 새 개체를 만들고 사용자가 제공한 정보로 개체를 초기화하며 CWinThread::CreateThread를 호출하여 스레드를 실행합니다. 작성의 일부가 실패한 경우 전체 프로시저에서 모든 개체가 제대로 할당 해제되었는지 확인합니다.

추가 정보

참고 항목

개념

C++ 및 MFC에서 다중 스레딩