Partilhar via


Classe CAMSchedule

[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 CAMSchedule classe implementa um agendador para relógios de referência.

Métodos públicos Descrição
Camschedule Método de construtor.
~Camschedule Método destruidor. Virtual.
GetAdviseCount Recupera o número de solicitações de consultoria pendentes.
GetNextAdviseTime Recupera a hora da próxima solicitação de aconselhamento.
AddAdvisePacket Adiciona uma solicitação de aconselhamento à lista de solicitações pendentes.
Unadvise Remove uma solicitação de aconselhamento.
Aconselhar Despacha todas as solicitações agendadas para uma hora especificada ou anterior.
Getevent Recupera um identificador de evento, que é usado para sinalizar uma alteração na próxima hora de aconselhamento.

Comentários

Esse objeto auxiliar mantém uma lista de solicitações de aconselhamento para um relógio de referência. A classe CBaseReferenceClock a usa para ajudar a agendar solicitações de aconselhamento. Os relógios usam esse objeto da seguinte maneira:

  1. O relógio cria um thread de trabalho para lidar com o agendamento.
  2. O thread de trabalho chama o método CAMSchedule::GetEvent para recuperar um identificador de evento do agendador. Ele aguarda esse evento, inicialmente com um tempo limite infinito.
  3. Para agendar uma nova solicitação de aconselhamento, o relógio chama o método CAMSchedule::AddAdvisePacket . Uma solicitação de aconselhamento pode ser única ou periódica. O agendador mantém a lista de solicitações em ordem de tempo.
  4. Se uma solicitação for adicionada à frente da lista, o agendador sinalizará o evento. (A lista está vazia no início, portanto, a primeira solicitação é garantida para sinalizar o evento.)
  5. Quando o evento é sinalizado, o thread de trabalho chama o método CAMSchedule::Advise , especificando a hora de referência atual. Se alguma solicitação pendente tiver expirado, o agendador as enviará.
  6. O método Advise retorna a hora da próxima solicitação. O thread de trabalho usa esse valor para calcular um novo valor de tempo limite.
  7. As etapas 2 6 se repetem indefinidamente.
  8. Para encerrar o thread de trabalho, o relógio define um sinalizador interno e sinaliza o evento.

Na etapa 2, o evento é sinalizado ou a espera atinge o tempo limite. Se o evento for sinalizado, isso significa que uma nova solicitação foi adicionada à frente da lista. O thread de trabalho deve calcular um novo valor de tempo limite. Por outro lado, se a espera atingir o tempo limite, isso significa que uma solicitação de aconselhamento chegou e deve ser expedida. A chamada para Aconselhar na etapa 5 manipula os dois casos.

Requisitos

Requisito Valor
parâmetro
Dsschedule.h (inclua Streams.h)
Biblioteca
Strmbase.lib (builds de varejo);
Strmbasd.lib (builds de depuração)