// allow the creating thread to return from CreateThread ATLVERIFY(::SetEvent(pStartup->hEvent));
// thread message loop:
while (GetMessage(&msg, NULL, 0, 0))
{
if (!TranslateAccelerator(msg.hwnd, NULL, &msg))
{
TranslateMessage(&msg);
DispatchMessage(&msg);
}
}
위의 코드를 보면 스레드르 생성하는 부분은 이벤트 객체를 만들어 스레드 초기화를 대기하게 되고 스레드 프로시저에서는 메시지를 받을 수 있도록 PeekMessage()를 호출하여 스레드 메시지큐를 생성하게 된다. 이로서 메시지를 받을 수 있는 초기화는 다 된 상태이므로 SetEvent를 호출하여 스레드 생성 루틴으로 제어를 넘기고 메시지 펌핑을하여 메시지를 받게 된다.
p.s 스레드에서 메시지큐를 생성하기 위해서는 GetMessage() 나 PeekMessage() 호출하면 내부적으로 메시지큐를 생성하게 된다.