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