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