Classe CCmdQueue

[La funzionalità associata a questa pagina, DirectShow, è una funzionalità legacy. È stata sostituita da MediaPlayer, IMFMediaEngine e Audio/Video Capture in Media Foundation. Queste funzionalità sono state ottimizzate per Windows 10 e Windows 11. Microsoft consiglia vivamente che il nuovo codice usi MediaPlayer, IMFMediaEngine e Audio/Video Capture in Media Foundation invece di DirectShow, quando possibile. Microsoft suggerisce che il codice esistente che usa le API legacy venga riscritto per usare le nuove API, se possibile.

La CCmdQueue classe è una classe base che fornisce una coda di oggetti CDeferredCommand e funzioni membro per aggiungere, rimuovere, controllare lo stato e richiamare i comandi in coda. Un CCmdQueue oggetto fa parte di un oggetto che implementa i metodi IQueueCommand . Gestione grafo filtri implementa i metodi IQueueCommand in modo che le applicazioni possano accodare i comandi al grafico dei filtri. I filtri che implementano l'interfaccia IQueueCommand usano direttamente questa classe. Se vuoi usare oggetti CDeferredCommand , la coda deve essere derivata da questa classe.

Esistono due modalità di sincronizzazione: grossolana e accurata. In modalità grossolana, l'applicazione attende fino all'arrivo di un orario specificato e quindi esegue il comando . In modalità accurata, l'applicazione attende l'inizio dell'elaborazione sull'esempio visualizzato al momento e quindi esegue il comando . Il filtro determina quale implementerà. Gestione grafici filtro implementa sempre la modalità grossolana per i comandi accodati in gestione del grafo dei filtri.

Se si vuole eseguire la sincronizzazione grossolana, è probabile che si voglia attendere il completamento di un comando e quindi eseguirlo. A tale scopo , chiamare CCmdQueue::GetDueCommand. Se sono presenti diversi aspetti da attendere, ottenere l'handle dell'evento da CCmdQueue::GetDueHandle e quindi chiamare CCmdQueue::GetDueCommand quando viene segnalato. il tempo di flusso avanza solo tra le chiamate alle funzioni membro CCmdQueue::Run e CCmdQueue::EndRun . Non esiste alcuna garanzia che, se l'handle è impostato, sarà disponibile un comando pronto. Ogni volta che l'evento viene segnalato, chiamare la funzione membro GetDueCommand (probabilmente con un timeout pari a zero); questo può restituire E_ABORT se non è pronto alcun comando.

Se si desidera una sincronizzazione accurata, chiamare la funzione membro CCmdQueue::GetCommandDueFor e passare gli esempi che si sta per elaborare come parametro. Verrà restituito quanto segue:

  • Comando in fase di flusso dovuto o prima di tale ora di flusso.
  • Comando in fase di presentazione dovuto o prima della presentazione dell'ora del flusso. Eseguire questa operazione solo tra le funzioni membro CCmdQueue::Run e CCmdQueue::EndRun , perché al di fuori di questo, il mapping dall'ora del flusso all'ora di presentazione non è noto.
  • Qualsiasi comando in fase di presentazione è scaduto.

Se si desidera una sincronizzazione accurata per esempi che potrebbero essere elaborati durante la modalità sospesa, è necessario usare i comandi in fase di flusso.

In tutti i casi, i comandi rimangono in coda fino a quando non vengono chiamati o annullati. L'impostazione e la reimpostazione dell'handle di eventi vengono gestite interamente da questo oggetto coda.

Membri dati protetti Descrizione
m_bRunning Contrassegno per lo stato di esecuzione; impostare TRUE durante l'esecuzione.
m_dwAdvise Consigliare l'identificatore dall'orologio di riferimento (zero se non è in sospeso).
m_evDue Imposta l'ora di scadenza di qualsiasi comando.
m_listPresentation Archivia i comandi in coda in fase di presentazione.
m_listStream Archivia i comandi in coda in tempo di flusso.
m_Lock Protegge l'accesso agli elenchi.
m_pClock Orologio di riferimento corrente.
m_StreamTimeOffset Contiene l'offset di tempo del flusso quando m_bRunning è TRUE.
m_StreamTimeOffset Contiene l'offset di tempo del flusso quando m_bRunning è TRUE.
Funzioni di membro Descrizione
CCmdQueue Costruisce un oggetto CCmdQueue .
CheckTime Determina se un determinato tempo è dovuto.
GetDueHandle Recupera l'handle dell'evento che verrà segnalato.
Funzioni membro sostituibili Descrizione
EndRun Passa alla modalità arrestata o sospesa.
GetCommandDueFor Recupera un comando posticipato pianificato in un'ora specificata.
GetDueCommand Recupera un puntatore al comando successivo dovuto.
Inserimento Aggiunge l'oggetto CDeferredCommand alla coda.
Nuovo Inizializza un comando da eseguire e restituisce un nuovo oggetto CDeferredCommand .
Rimuovi Rimuove l'oggetto CDeferredCommand dalla coda.
Esegui Passa alla modalità di esecuzione.
SetSyncSource Imposta l'orologio utilizzato per l'intervallo.
SetTimeAdvise Imposta un evento timer con l'orologio di riferimento.