Classe CAMSchedule

[La funzionalità associata a questa pagina, DirectShow, è una funzionalità legacy. È stata sostituita da MediaPlayer, FMMediaEngine 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, FMMediaEngine e Audio/Video Capture in Media Foundation anziché DirectShow, quando possibile. Microsoft suggerisce che il codice esistente che usa le API legacy venga riscritto per usare le nuove API, se possibile.

La CAMSchedule classe implementa un utilità di pianificazione per gli orologi di riferimento.

Metodi pubblici Descrizione
CAMSchedule Metodo costruttore.
~CAMSchedule Metodo distruttore. Virtuale.
GetAdviseCount Recupera il numero di richieste di consulenza in sospeso.
GetNextAdviseTime Recupera l'ora della richiesta di consulenza successiva.
AddAdvisePacket Aggiunge una richiesta di consulenza all'elenco delle richieste in sospeso.
Unadvise Rimuove una richiesta di consulenza.
Consigliare Invia tutte le richieste pianificate per un'ora specificata o versioni precedenti.
GetEvent Recupera un handle di eventi che viene usato per segnalare una modifica nella prossima volta.

Commenti

Questo oggetto helper gestisce un elenco di richieste di consulenza per un orologio di riferimento. La classe CBaseReferenceClock lo usa per pianificare le richieste di consulenza. Gli orologi usano questo oggetto nel modo seguente:

  1. L'orologio crea un thread di lavoro per gestire la pianificazione.
  2. Il thread di lavoro chiama il metodo CAMSchedule::GetEvent per recuperare un handle eventi dall'utilità di pianificazione. Attende questo evento, inizialmente con un timeout infinito.
  3. Per pianificare una nuova richiesta di consulenza, l'orologio chiama il metodo CAMSchedule::AddAdvisePacket . Una richiesta di consulenza può essere un'unica operazione o periodica. L'utilità di pianificazione mantiene l'elenco delle richieste in ordine di tempo.
  4. Se una richiesta viene aggiunta alla parte anteriore dell'elenco, l'utilità di pianificazione segnala l'evento. L'elenco è vuoto per primo, quindi la prima richiesta è garantita per segnalare l'evento.
  5. Quando l'evento viene segnalato, il thread di lavoro chiama il metodo CAMSchedule::Advise , specificando l'ora di riferimento corrente. Se le richieste in sospeso sono scadute, l'utilità di pianificazione li invia.
  6. Il metodo Advise restituisce l'ora della richiesta successiva. Il thread di lavoro usa questo valore per calcolare un nuovo valore di timeout.
  7. Passaggi 2 6 ripetere in modo indefinito.
  8. Per terminare il thread di lavoro, l'orologio imposta un flag interno e segnala l'evento.

Nel passaggio 2, l'evento viene segnalato o il timeout di attesa. Se l'evento viene segnalato, significa che una nuova richiesta è stata aggiunta alla parte anteriore dell'elenco. Il thread di lavoro deve calcolare un nuovo valore di timeout. D'altra parte, se il tempo di attesa è scaduto, significa che una richiesta di consulenza è scaduta e deve essere inviata. La chiamata a Consiglia nel passaggio 5 gestisce entrambi i casi.

Requisiti

Requisito Valore
Intestazione
Dsschedule.h (include Streams.h)
Libreria
Strmbase.lib (build al dettaglio);
Strmbasd.lib (build di debug)