Compartilhar via


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.