for (;;) {
const DWORD r = MsgWaitForMultipleObjects(1, &hTh, FALSE, INFINITE, QS_SENDMESSAGE);

if (r == WAIT_OBJECT_0 + 1) {
MSG msg;
PeekMessage(&msg, NULL, 0, 0, PM_NOREMOVE);
}
else
break;
}

こういう方法もある。
ttp://msdn.microsoft.com/en-us/library/ms644927.aspxのMessage Deadlocksに書いてあるけど
PeekMessageを呼ぶとSendされてたメッセージを処理できる。