Compartir a través de


CCmdQueue (clase)

[La característica asociada a esta página, DirectShow, es una característica heredada. Se ha reemplazado por MediaPlayer, IMFMediaEngine y Captura de audio/vídeo en Media Foundation. Esas características se han optimizado para Windows 10 y Windows 11. Microsoft recomienda encarecidamente que el nuevo código use MediaPlayer, IMFMediaEngine y Audio/Video Capture en Media Foundation en lugar de DirectShow, siempre que sea posible. Microsoft sugiere que el código existente que usa las API heredadas se reescriba para usar las nuevas API si es posible.

La CCmdQueue clase es una clase base que proporciona una cola de objetos CDeferredCommand y funciones miembro para agregar, quitar, comprobar el estado e invocar los comandos en cola. Un CCmdQueue objeto forma parte de un objeto que implementa métodos IQueueCommand . El administrador de gráficos de filtros implementa métodos IQueueCommand para que las aplicaciones puedan poner en cola comandos en el gráfico de filtros. Los filtros que implementan la interfaz IQueueCommand usan directamente esta clase. Si desea usar objetos CDeferredCommand , la cola debe derivarse de esta clase.

Hay dos modos de sincronización: grueso y preciso. En el modo general, la aplicación espera hasta que llega una hora especificada y, a continuación, ejecuta el comando . En modo preciso, la aplicación espera hasta que el procesamiento comienza en el ejemplo que aparece en el momento y, a continuación, ejecuta el comando . El filtro determina cuál implementará. El administrador de gráficos de filtros siempre implementa el modo grueso de los comandos que se ponen en cola en el administrador de gráficos de filtros.

Si desea una sincronización general, es probable que desee esperar hasta que haya un comando debido y, a continuación, ejecutarlo. Para ello, llame a CCmdQueue::GetDueCommand. Si tiene varias cosas que esperar, obtenga el identificador de evento de CCmdQueue::GetDueHandle y, a continuación, llame a CCmdQueue::GetDueCommand cuando se señale. El tiempo de transmisión solo avanzará entre las llamadas a las funciones miembro CCmdQueue::Run y CCmdQueue::EndRun . No hay ninguna garantía de que, si se establece el identificador, habrá un comando listo. Cada vez que se señala el evento, llame a la función miembro GetDueCommand (probablemente con un tiempo de espera de cero); esto puede devolver E_ABORT si no hay ningún comando listo.

Si desea una sincronización precisa, llame a la función miembro CCmdQueue::GetCommandDueFor y pase los ejemplos que va a procesar como parámetro. Esto devuelve lo siguiente:

  • Un comando en tiempo de secuencia vencida en o antes de ese tiempo de secuencia.
  • Un comando en tiempo de presentación vencida en o antes de la presentación del tiempo de secuencia. Haga esto solo entre las funciones miembro CCmdQueue::Run y CCmdQueue::EndRun , debido a que fuera de esto, no se conoce la asignación del tiempo de transmisión a la hora de presentación.
  • Cualquier comando en tiempo de presentación vencida ahora.

Si desea una sincronización precisa para ejemplos que se pueden procesar durante el modo en pausa, debe usar comandos en tiempo de secuencia.

En todos los casos, los comandos permanecen en cola hasta que se llama o se cancelan. Este objeto de cola administra completamente la configuración y el restablecimiento del identificador de eventos.

Miembros de datos protegidos Descripción
m_bRunning Marca para el estado de ejecución; establezca TRUE al ejecutarse.
m_dwAdvise Aconseje el identificador del reloj de referencia (cero si no hay ningún aviso pendiente).
m_evDue Establece la hora en que se deben realizar los comandos.
m_listPresentation Almacena los comandos en cola en tiempo de presentación.
m_listStream Almacena los comandos en cola en tiempo de secuencia.
m_Lock Protege el acceso a las listas.
m_pClock Reloj de referencia actual.
m_StreamTimeOffset Contiene el desplazamiento de tiempo de la secuencia cuando m_bRunning es TRUE.
m_StreamTimeOffset Contiene el desplazamiento de tiempo de la secuencia cuando m_bRunning es TRUE.
Funciones de miembro Descripción
CCmdQueue Construye un objeto CCmdQueue .
CheckTime Determina si se debe un tiempo determinado.
GetDueHandle Recupera el identificador de eventos que se indicará.
Funciones miembro reemplazables Descripción
EndRun Cambia al modo detenido o en pausa.
GetCommandDueFor Recupera un comando diferido programado en un momento especificado.
GetDueCommand Recupera un puntero al siguiente comando que se debe.
Insertar Agrega el objeto CDeferredCommand a la cola.
Nuevo Inicializa un comando que se va a ejecutar y devuelve un nuevo objeto CDeferredCommand .
Remove Quita el objeto CDeferredCommand de la cola.
Ejecutar Cambia al modo de ejecución.
SetSyncSource Establece el reloj usado para el tiempo.
SetTimeAdvise Configura un evento de temporizador con el reloj de referencia.