вне процесса рендеринга - PullRequest
       2

вне процесса рендеринга

0 голосов
/ 05 ноября 2010

Я пытаюсь реализовать внепроцессный рендеринг для моего приложения (например, что делает Chrome). У меня есть ipc (межпроцессное взаимодействие), все настроено и работает, однако он просто блокируется при попытке инициировать новую форму в другом процессе.

Я запустил процесс с помощью унаследованных дескрипторов как true. Есть ли что-то еще, что мне нужно сделать?

Я рад предоставить пример кода, если это необходимо.

Редактировать: он блокируется в вызовах API окон. Работает нормально, когда в том же процессе

1 Ответ

1 голос
/ 05 ноября 2010

Очень легко соединить два потока, если у них есть окна с любым типом отношений.

Эффективный результат этого состоит в том, что ваши вызовы 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
   }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...