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. |