Поделиться через


Класс CAMSchedule

[Функция, связанная с этой страницей DirectShow, является устаревшей функцией. Он был заменен MediaPlayer, IMFMediaEngine, и аудио/ видео захвата в Media Foundation. Эти функции оптимизированы для Windows 10 и Windows 11. Корпорация Майкрософт настоятельно рекомендует, чтобы новый код использовал MediaPlayer, IMFMediaEngine и аудио- и видеозахват в Media Foundation вместо DirectShow, когда это возможно. Корпорация Майкрософт предлагает переписать существующий код, использующий устаревшие API, чтобы по возможности использовать новые API.]

Класс CAMSchedule реализует планировщик для эталонных часов.

Открытые методы Описание
CAMSchedule Метод конструктора.
~CAMSchedule Метод деструктора. Виртуальной.
GetAdviseCount Извлекает количество ожидающих запросов на консультирование.
GetNextAdviseTime Извлекает время следующего запроса на получение рекомендаций.
AddAdvisePacket Добавляет запрос на рекомендацию в список ожидающих запросов.
Отмена заполнения Удаляет запрос на получение рекомендаций.
Советую Отправляет все запросы, запланированные на указанное время или ранее.
GetEvent Извлекает дескриптор события, который используется для передачи сигналов об изменении во время следующего уведомления.

Комментарии

Этот вспомогательный объект поддерживает список запросов на рекомендации для эталонных часов. Класс CBaseReferenceClock использует его для планирования запросов на рекомендации. Часы используют этот объект следующим образом:

  1. Часы создают рабочий поток для обработки планирования.
  2. Рабочий поток вызывает метод CAMSchedule::GetEvent для получения дескриптора событий из планировщика. Он ожидает этого события, изначально с бесконечным тайм-аутом.
  3. Чтобы запланировать новый запрос на получение рекомендаций, часы вызывают метод CAMSchedule::AddAdvisePacket . Запрос на получение рекомендаций может быть однократным или периодическим. Планировщик хранит список запросов в порядке времени.
  4. Если запрос добавляется в начало списка, планировщик сообщает о событии. (Сначала список пуст, поэтому первый запрос гарантированно сигнализирует о событии.)
  5. При сигнале события рабочий поток вызывает метод CAMSchedule::Advise , указывая текущее время ссылки. Если срок действия ожидающих запросов истек, планировщик отправляет их.
  6. Метод Advise возвращает время следующего запроса. Рабочий поток использует это значение для вычисления нового значения времени ожидания.
  7. Шаги 2 6 повторяют на неопределенный срок.
  8. Чтобы завершить рабочий поток, часы устанавливают внутренний флаг и сигналит о событии.

На шаге 2 подается сигнал о событии или истекает время ожидания. Если событие подается, это означает, что в начало списка был добавлен новый запрос. Рабочий поток должен вычислить новое значение времени ожидания. С другой стороны, если время ожидания истекло, это означает, что запрос на получение рекомендаций пришел к оплате и должен быть отправлен. Вызов "Совет" на шаге 5 обрабатывает оба случая.

Требования

Требование Значение
Заголовок
Dsschedule.h (включая Streams.h)
Библиотека
Strmbase.lib (розничные сборки);
Strmbasd.lib (отладочные сборки)