CAMSchedule (clase)

[La característica asociada a esta página, DirectShow, es una característica heredada. Se ha reemplazado por MediaPlayer, IMFMediaEngine y Captura de audio/vídeo en Media Foundation. Esas características se han optimizado para Windows 10 y Windows 11. Microsoft recomienda encarecidamente que el nuevo código use MediaPlayer, IMFMediaEngine y Audio/Video Capture en Media Foundation en lugar de DirectShow, siempre que sea posible. Microsoft sugiere que el código existente que usa las API heredadas se reescriba para usar las nuevas API si es posible.

La CAMSchedule clase implementa un programador para los relojes de referencia.

Métodos públicos Descripción
CAMSchedule Método constructor.
~CAMSchedule Método de destructor. Virtual.
GetAdviseCount Recupera el número de solicitudes de aviso pendientes.
GetNextAdviseTime Recupera la hora de la siguiente solicitud de aviso.
AddAdvisePacket Agrega una solicitud de aviso a la lista de solicitudes pendientes.
Unadvise Quita una solicitud de aviso.
Consejo Envía todas las solicitudes programadas para una hora especificada o anterior.
GetEvent Recupera un identificador de eventos, que se usa para indicar un cambio en la próxima hora de aviso.

Observaciones

Este objeto auxiliar mantiene una lista de solicitudes de aviso para un reloj de referencia. La clase CBaseReferenceClock la usa para ayudar a programar solicitudes de asesoramiento. Los relojes usan este objeto de la siguiente manera:

  1. El reloj crea un subproceso de trabajo para controlar la programación.
  2. El subproceso de trabajo llama al método CAMSchedule::GetEvent para recuperar un identificador de eventos del programador. Espera en este evento, inicialmente con un tiempo de espera infinito.
  3. Para programar una nueva solicitud de aviso, el reloj llama al método CAMSchedule::AddAdvisePacket . Una solicitud de asesoramiento puede ser de un solo disparo o periódico. El programador mantiene la lista de solicitudes en orden de tiempo.
  4. Si se agrega una solicitud al principio de la lista, el programador señala el evento. (La lista está vacía al principio, por lo que se garantiza que la primera solicitud indique el evento).
  5. Cuando se señala el evento, el subproceso de trabajo llama al método CAMSchedule::Advise , especificando la hora de referencia actual. Si alguna solicitud pendiente ha expirado, el programador las envía.
  6. El método Advise devuelve la hora de la siguiente solicitud. El subproceso de trabajo usa este valor para calcular un nuevo valor de tiempo de espera.
  7. Los pasos 2 6 se repiten indefinidamente.
  8. Para finalizar el subproceso de trabajo, el reloj establece una marca interna y señala el evento.

En el paso 2, se señala el evento o se agota el tiempo de espera. Si se señala el evento, significa que se agregó una nueva solicitud al principio de la lista. El subproceso de trabajo debe calcular un nuevo valor de tiempo de espera. Por otro lado, si se agota el tiempo de espera, significa que se ha producido una solicitud de aviso y debe enviarse. La llamada a Advise en el paso 5 controla ambos casos.

Requisitos

Requisito Value
Encabezado
Dsschedule.h (include Streams.h)
Biblioteca
Strmbase.lib (compilaciones comerciales);
Strmbasd.lib (compilaciones de depuración)