Очень легко соединить два потока, если у них есть окна с любым типом отношений.
Эффективный результат этого состоит в том, что ваши вызовы IPC не могут блокироваться при ожидании ответа - ваши чтения IPC всегда нужныиспользовать MsgWaitForMultipleObjects , чтобы вы могли обрабатывать оконные сообщения от другого процесса / потока в ожидании сообщения IPC, указывающего завершение.
Что вы делаете, это заменяете текущий вызов WaitForMultipleObjectsс MSGWaitForMultipleObjects.Когда он возвращается, вы проверяете возвращаемое значение.Если nCount - это количество дескрипторов IPC, которые вы ожидаете получить:
// Pump messages while waiting on 0 or more handles.
for(;;)
{
while(PeekMessage(&msg,0,0,0,PM_REMOVE))
{
TranslateMessage(&msg);
DispatchMessage(&msg);
}
DWORD ret = MsgWaitForMultipleObjects(nCount,pHandles,FALSE,dwTimeout,QS_ALLEVENTS);
if(ret >= WAIT_OBJECT_0 && ret < (WAIT_OBJECT_0 + nCount))
{
// one of the handles was signalled.
return ret;
}
else if(ret == WAIT_OBJECT_0 + nCount)
{
// The wait was aborted because there is at least one message,
// go back to pumping messages
continue;
}
else
{
// test for WAIT_OBJECT_ABANDONED_0, WAIT_TIMEOUT etc. as appropriate
}
}