Без:
Примечание:
Вопрос:
Иллюстрация ниже:
hresult = pis8->QueryInterface(
__uuidof(IConnectionPointContainer),
(void **) &pContainer);
//result handling omitted
hresult = pContainer->FindConnectionPoint(
__uuidof(IS8SimulationEvents),
&pConnection);
//result handling omitted





Если я правильно понимаю вопрос, похоже, что у клиента должен быть цикл ожидания, что-то вроде
while(!threadCancel)
{
DWORD waitResult = WaitForMultipleObjects(actionCount, waitHandles, FALSE, 500);
switch (waitResult)
{
case SERVER_COMMAND_1:
HandleServerCommand1();
break;
...etc...
default:
throw ...
}
}
Приемники событий клиента запускают дескрипторы ожидания, эффективно позволяя серверу указывать клиенту, что делать.
Клиент реализует интерфейс событий (IS8SimulationEvents). Он может быть в отдельном компоненте или в самом клиентском компоненте. Реализация вызывается, когда компонент запускает событие.
После FindConnectionPoint клиент вызывает pConnection->Advise, передавая IS8SimulationEvents и получая «cookie». Файл cookie необходим для вызова Unadvise, который должен быть вызван во время очистки для отключения.
Если клиент работает в другом потоке, чем сервер, клиенту необходимо запустить цикл сообщений для приема вызовов.
см. здесь: en.wikipedia.org/wiki/Message_loop_in_Microsoft_Windows Вы можете выйти из этого с помощью PostQuitMessage или добавив другой механизм в цикл. Если вам нужно смешать обработку сообщений с ожиданием событий / подобных вещей, используйте MsgWaitForMultipleObjects / Ex в цикле
Как эффективно реализовать цикл сообщений?