EvtSubscribe Модель Pull Vs Push - PullRequest
       12

EvtSubscribe Модель Pull Vs Push

0 голосов
/ 22 августа 2011

Я пытаюсь использовать следующие API из Windows.

EVT_HANDLE WINAPI EvtSubscribe(
  __in  EVT_HANDLE Session,
  __in  HANDLE SignalEvent,
  __in  LPCWSTR ChannelPath,
  __in  LPCWSTR Query,
  __in  EVT_HANDLE Bookmark,
  __in  PVOID context,
  __in  EVT_SUBSCRIBE_CALLBACK Callback,
  __in  DWORD Flags
);

Этот API поддерживает две модели для подписки PULL и PUSH

Естьдве модели подписки: модель pull и модель push.В модели push вы реализуете обратный вызов подписки и задаете для параметра Callback свою реализацию.Служба будет вызывать ваш обратный вызов для каждого события, соответствующего критериям вашего запроса (или в случае возникновения ошибки).

В модели извлечения вы создаете объект события, который сигнализирует служба.При получении сигнала вы вызываете функцию EvtNext, используя дескриптор подписки для перечисления событий.Вы должны вызывать функцию EvtClose для каждого события, которое вы перечисляете.Затем вы сбрасываете объект и ждете, пока сервис снова подаст сигнал.Этот процесс повторяется до тех пор, пока вы не отмените подписку.

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

1 Ответ

0 голосов
/ 06 сентября 2011

Функция обратного вызова вызывается из другого потока, поэтому вам, возможно, придется синхронизировать, и если вам придется синхронизировать, это будет проще с моделью pull ... И если синхронизировать, будет легче закрыть подписку с Event, так каквы можете подождать два события: одно от EvtSubscribe и одно для закрытия ... Я трачу несколько часов, чтобы понять, почему мой вызов EvtClose зависает с моделью обратного вызова!

...