Classe CCmdQueue
[O recurso associado a esta página, DirectShow, é um recurso herdado. Ele foi substituído por MediaPlayer, IMFMediaEngine e Captura de Áudio/Vídeo na Media Foundation. Esses recursos foram otimizados para Windows 10 e Windows 11. A Microsoft recomenda fortemente que o novo código use MediaPlayer, IMFMediaEngine e Captura de Áudio/Vídeo no Media Foundation em vez de DirectShow, quando possível. A Microsoft sugere que o código existente que usa as APIs herdadas seja reescrito para usar as novas APIs, se possível.]
A CCmdQueue
classe é uma classe base que fornece uma fila de objetos CDeferredCommand e funções membro para adicionar, remover, marcar status e invocar os comandos enfileirados. Um CCmdQueue
objeto faz parte de um objeto que implementa métodos IQueueCommand . O gerenciador de grafo de filtro implementa métodos IQueueCommand para que os aplicativos possam enfileirar comandos no grafo de filtro. Os filtros que implementam a interface IQueueCommand usam diretamente essa classe. Se você quiser usar objetos CDeferredCommand , sua fila deverá ser derivada dessa classe.
Há dois modos de sincronização: grosseiro e preciso. No modo grosseiro, o aplicativo aguarda até chegar uma hora especificada e, em seguida, executa o comando . No modo preciso, o aplicativo aguarda até que o processamento comece no exemplo que aparece no momento e execute o comando . O filtro determina qual será implementado. O gerenciador de grafo de filtro sempre implementa o modo grosseiro para comandos enfileirados no gerenciador de grafo de filtro.
Se você quiser sincronização grosseira, provavelmente deseja aguardar até que haja um comando devido e, em seguida, executá-lo. Você pode fazer isso chamando CCmdQueue::GetDueCommand. Se você tiver várias coisas para esperar, obtenha o identificador de evento de CCmdQueue::GetDueHandle e chame CCmdQueue::GetDueCommand quando isso for sinalizado. O tempo de fluxo avançará apenas entre as chamadas para as funções membro CCmdQueue::Run e CCmdQueue::EndRun. Não há nenhuma garantia de que, se o identificador estiver definido, haverá um comando pronto. Sempre que o evento for sinalizado, chame a função membro GetDueCommand (provavelmente com um tempo limite de zero); isso poderá retornar E_ABORT se nenhum comando estiver pronto.
Se você quiser sincronização precisa, chame a função membro CCmdQueue::GetCommandDueFor e passe os exemplos que você está prestes a processar como um parâmetro. Isso retorna o seguinte:
- Um comando de tempo de fluxo com vencimento em ou antes desse tempo de fluxo.
- Um comando de tempo de apresentação devido em ou antes da apresentação do tempo de fluxo. Faça isso somente entre as funções membro CCmdQueue::Run e CCmdQueue::EndRun , pois fora disso, o mapeamento do tempo de fluxo para o tempo de apresentação não é conhecido.
- Qualquer comando de hora de apresentação deve ser entregue agora.
Se você quiser sincronização precisa para exemplos que podem ser processados durante o modo pausado, você deve usar comandos de tempo de fluxo.
Em todos os casos, os comandos permanecem na fila até serem chamados ou cancelados. A configuração e a redefinição do identificador de evento são totalmente gerenciadas por esse objeto de fila.
Membros de Dados Protegidos | Descrição |
---|---|
m_bRunning | Sinalizador para estado de execução; defina TRUE ao executar. |
m_dwAdvise | Informe o identificador do relógio de referência (zero se nenhum aviso pendente). |
m_evDue | Define a hora em que todos os comandos devem ser vencidos. |
m_listPresentation | Armazena comandos enfileirados na hora da apresentação. |
m_listStream | Armazena comandos enfileirados em tempo de fluxo. |
m_Lock | Protege o acesso a listas. |
m_pClock | Relógio de referência atual. |
m_StreamTimeOffset | Contém o deslocamento de tempo de fluxo quando m_bRunning é TRUE. |
m_StreamTimeOffset | Contém o deslocamento de tempo de fluxo quando m_bRunning é TRUE. |
Funções de membro | Descrição |
CCmdQueue | Constrói um objeto CCmdQueue . |
CheckTime | Determina se um determinado tempo é devido. |
GetDueHandle | Recupera o identificador de evento que será sinalizado. |
Funções de membro substituíveis | Descrição |
Endrun | Alterna para o modo interrompido ou pausado. |
GetCommandDueFor | Recupera um comando adiado agendado em um horário especificado. |
GetDueCommand | Recupera um ponteiro para o próximo comando que é devido. |
Inserção | Adiciona o objeto CDeferredCommand à fila. |
Novo | Inicializa um comando a ser executado e retorna um novo objeto CDeferredCommand . |
Remover | Remove o objeto CDeferredCommand da fila. |
Executar | Alterna para o modo de execução. |
SetSyncSource | Define o relógio usado para o tempo. |
SetTimeAdvise | Configura um evento de temporizador com o relógio de referência. |