다중 스레딩: MFC 사용자 인터페이스 스레드 만들기
사용자 인터페이스 스레드는 일반적으로 사용자 입력을 처리하고 애플리케이션의 다른 부분을 실행하는 스레드와 독립적으로 사용자 이벤트에 응답하는 데 사용됩니다. 기본 애플리케이션 스레드(파생 클래스에서 CWinApp
제공됨)가 이미 만들어지고 시작되었습니다. 이 항목에서는 추가 사용자 인터페이스 스레드를 만드는 데 필요한 단계를 설명합니다.
사용자 인터페이스 스레드를 만들 때 가장 먼저 해야 할 일은 CWinThread에서 클래스를 파생하는 것입니다. DECLARE_DYNCREATE 및 IMPLEMENT_DYNCREATE 매크로를 사용하여 이 클래스를 선언하고 구현해야 합니다. 이 클래스는 일부 함수를 재정의해야 하며 다른 함수를 재정의할 수 있습니다. 이러한 함수와 수행해야 하는 작업은 다음 표에 설명되어 있습니다.
사용자 인터페이스 스레드를 만들 때 재정의할 함수
함수 | 목적 |
---|---|
ExitInstance | 스레드가 종료되면 정리를 수행합니다. 일반적으로 재정의됩니다. |
InitInstance | 스레드 인스턴스 초기화를 수행합니다. 재정의해야 합니다. |
OnIdle | 스레드별 유휴 시간 처리를 수행합니다. 일반적으로 재정의되지 않습니다. |
PreTranslateMessage | 메시지를 디스패치하기 TranslateMessage 전에 필터링합니다.DispatchMessage 일반적으로 재정의되지 않습니다. |
ProcessWndProcException | 스레드의 메시지 및 명령 처리기에서 throw된 처리되지 않은 예외를 가로챌 수 있습니다. 일반적으로 재정의되지 않습니다. |
Run | 스레드에 대한 함수 제어 메시지 펌프를 포함합니다. 거의 재정의하지 않습니다. |
MFC는 매개 변수 오버로드를 통해 AfxBeginThread
의 두 가지 버전을 제공합니다. 하나는 작업자 스레드만 만들 수 있고, 다른 하나는 사용자 인터페이스 스레드 또는 작업자 스레드를 만들 수 있습니다. 사용자 인터페이스 스레드를 시작하려면 AfxBeginThread의 두 번째 오버로드를 호출하여 다음 정보를 제공합니다.
(선택 사항) 원하는 우선 순위 수준입니다. 기본값은 일반 우선 순위입니다. 사용 가능한 우선 순위 수준에 대한 자세한 내용은 Windows SDK의 SetThreadPriority를 참조하세요.
(선택 사항) 스레드에 대해 원하는 스택 크기입니다. 기본값은 만드는 스레드와 동일한 크기 스택입니다.
(선택 사항) 스레드를 일시 중단된 상태로 만들려면 CREATE_SUSPENDED. 기본값은 0이거나 스레드를 정상적으로 시작합니다.
(선택 사항) 원하는 보안 특성입니다. 기본값은 부모 스레드와 동일한 액세스입니다. 이 보안 정보의 형식에 대한 자세한 내용은 Windows SDK의 SECURITY_ATTRIBUTES 참조하세요.
AfxBeginThread
는 대부분의 작업을 수행합니다. 클래스의 새 개체를 만들고, 제공한 정보로 초기화하고, CWinThread::CreateThread를 호출하여 스레드 실행을 시작합니다. 생성의 일부가 실패할 경우 모든 개체의 할당이 제대로 취소되었는지 확인하기 위해 프로시저 전체에서 검사가 수행됩니다.