Уведомление о событии COM - PullRequest
       13

Уведомление о событии COM

1 голос
/ 18 января 2009

Без:

  • АТЛ
  • MFC

Примечание:

  • Клиент выполняется в потоке , отличном от потока сервера

Вопрос:

  • Как мне управлять поведением клиента, как только уведомление о событии получено от COM-объекта (Сервер) ?
  • Как реализовать интерфейс событий от клиента?

Иллюстрация ниже:

hresult = pis8->QueryInterface(
                __uuidof(IConnectionPointContainer),
            (void **) &pContainer);

//result handling omitted


hresult = pContainer->FindConnectionPoint(
                      __uuidof(IS8SimulationEvents),
                      &pConnection);

//result handling omitted

Ответы [ 2 ]

1 голос
/ 18 января 2009

Клиент реализует интерфейс событий (IS8SimulationEvents). Это может быть отдельный компонент или сам компонент клиента. Реализация вызывается, когда компонент запускает событие.

После FindConnectionPoint клиент вызывает pConnection->Advise, передавая IS8SimulationEvents и получая «cookie». Файл cookie должен вызывать Unadvise, который должен быть вызван во время очистки для отключения.

Если клиент работает в потоке, отличном от сервера, клиент должен запустить цикл обработки сообщений для приема вызовов.

0 голосов
/ 18 января 2009

Если я правильно понял вопрос, похоже, что клиент должен запустить waitloop, что-то вроде

while(!threadCancel)
{
    DWORD waitResult = WaitForMultipleObjects(actionCount, waitHandles, FALSE, 500);
    switch (waitResult)
    {
        case SERVER_COMMAND_1:
            HandleServerCommand1();
            break;
        ...etc...
        default:
           throw ...
     }
}

Клиентские приемники событий запускают дескрипторы ожидания, эффективно позволяя серверу сообщать клиенту, что делать.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...