Класс CCmdQueue
[Функция, связанная с этой страницей DirectShow, является устаревшей функцией. Он был заменен MediaPlayer, IMFMediaEngine, и аудио/ видео захвата в Media Foundation. Эти функции оптимизированы для Windows 10 и Windows 11. Корпорация Майкрософт настоятельно рекомендует использовать в новом коде MediaPlayer, IMFMediaEngine и аудио/видеозахват в Media Foundation вместо DirectShow, когда это возможно. Корпорация Майкрософт предлагает переписать существующий код, в котором используются устаревшие API, чтобы по возможности использовать новые API.]
Класс CCmdQueue
является базовым классом, предоставляющим очередь объектов CDeferredCommand и функций-членов для добавления, удаления, проверка состояния и вызова команд в очереди. Объект CCmdQueue
является частью объекта , реализующего методы IQueueCommand . Диспетчер графов фильтров реализует методы IQueueCommand , чтобы приложения могли помещать команды в граф фильтра. Фильтры, реализующие интерфейс IQueueCommand , используют этот класс напрямую. Если вы хотите использовать объекты CDeferredCommand , очередь должна быть производной от этого класса.
Существует два режима синхронизации: грубый и точный. В грубом режиме приложение ожидает прибытия указанного времени, а затем выполняет команду. В точном режиме приложение ожидает, пока не начнется обработка примера, который отображается в то время, а затем выполняет команду . Фильтр определяет, какой из них он будет реализовывать. Диспетчер графов фильтров всегда реализует грубый режим для команд, помещенных в очередь в диспетчере графов фильтров.
Если вам нужна грубая синхронизация, вероятно, потребуется подождать, пока не будет выполнена команда, а затем выполнить ее. Это можно сделать, вызвав CCmdQueue::GetDueCommand. Если вам нужно дождаться нескольких вещей, получите дескриптор события из CCmdQueue::GetDueHandle , а затем вызовите CCmdQueue::GetDueCommand при появлении сигнала об этом. Время потока будет переходить только между вызовами функций-членов CCmdQueue::Run и CCmdQueue::EndRun . Нет никакой гарантии, что если дескриптор задан, команда будет готова. При каждом сигнале о событии вызывайте функцию-член GetDueCommand (вероятно, с нулевым тайм-аутом); может возвращать E_ABORT, если команда не готова.
Если требуется точную синхронизацию, вызовите функцию-член CCmdQueue::GetCommandDueFor и передайте примеры, которые вы собираетесь обработать в качестве параметра. При этом возвращается следующее:
- Команда времени потока, которая должна быть выполнена в момент или до этого времени потока.
- Команда времени презентации, выполненная в момент или до представления времени потока. Это можно сделать только между функциями-членами CCmdQueue::Run и CCmdQueue::EndRun , так как вне этого сопоставление времени потока с временем представления неизвестно.
- Любая команда времени презентации должна быть выполнена сейчас.
Если требуется точную синхронизацию для примеров, которые могут обрабатываться в приостановленном режиме, необходимо использовать команды времени потока.
Во всех случаях команды остаются в очереди до вызова или отмены. Настройка и сброс дескриптора событий полностью управляются этим объектом очереди.
Защищенные члены данных | Описание |
---|---|
m_bRunning | Флаг для состояния выполнения; при выполнении установите значение TRUE . |
m_dwAdvise | Сообщить идентификатор из эталонных часов (ноль, если нет необработанных рекомендаций). |
m_evDue | Задает время выполнения каких-либо команд. |
m_listPresentation | Хранит команды, помещенные в очередь во время презентации. |
m_listStream | Хранит команды, помещенные в очередь во время потока. |
m_Lock | Защищает доступ к спискам. |
m_pClock | Текущие эталонные часы. |
m_StreamTimeOffset | Содержит смещение времени потока, если m_bRunning имеет значение TRUE. |
m_StreamTimeOffset | Содержит смещение времени потока, если m_bRunning имеет значение TRUE. |
Функции элементов | Описание |
CCmdQueue | Создает объект CCmdQueue . |
CheckTime | Определяет, истекает ли заданное время. |
GetDueHandle | Извлекает дескриптор события, который будет сигнализировать. |
Переопределимые функции-члены | Описание |
EndRun | Переключается в остановленный или приостановленный режим. |
GetCommandDueFor | Извлекает отложенную команду, запланированную на указанное время. |
GetDueCommand | Извлекает указатель на следующую команду, которая должна быть выполнена. |
Вставить | Добавляет объект CDeferredCommand в очередь. |
Новые функции | Инициализирует выполняемую команду и возвращает новый объект CDeferredCommand . |
Удалить | Удаляет объект CDeferredCommand из очереди. |
Выполнить | Переключается в режим выполнения. |
SetSyncSource | Задает часы, используемые для синхронизации. |
SetTimeAdvise | Настраивает событие таймера со ссылочными часами. |