Вам не нужно ждать сообщения.Вам просто нужно дождаться создания очереди сообщений.Таким образом, насос сообщений будет получать все опубликованные сообщения, когда он наконец запустится.Вот способ, которым, я думаю, вы могли бы сделать это (проверка ошибок опущена):
CEvent myEvent;
CWinThread * myThread = AfxBeginThread( ..., CREATE_SUSPENDED );
QueueUserAPC( MyCallback, *myThread, reintepret_cast<ULONG_PTR>( &myEvent ) );
myThread->Resume();
WaitForSingleObject( myEvent, INFINITE );
В Windows, как только поток запускается, он запускает любые пользовательские APC в очереди перед вызовом своей точки входа.Таким образом, это позволяет вам проникнуть в некоторый код в новом потоке, прежде чем MFC Framework вступит во владение.Ваш обратный вызов APC будет выглядеть примерно так:
VOID CALLBACK MyCallback( ULONG_PTR param )
{
// Call peek message to force the creation of the thread's message queue.
MSG dummy;
PeekMessage( &dummy, NULL, 0, 0, PM_NOREMOVE );
CEvent * pEvent = reinterpret_cast<CEvent *>( param );
pEvent->SetEvent();
}