Classe CAMSchedule

[La fonctionnalité associée à cette page, DirectShow, est une fonctionnalité héritée. Il a été remplacé par MediaPlayer, IMFMediaEngine et Audio/Video Capture dans Media Foundation. Ces fonctionnalités ont été optimisées pour Windows 10 et Windows 11. Microsoft recommande vivement au nouveau code d’utiliser MediaPlayer, IMFMediaEngine et La capture audio/vidéo dans Media Foundation au lieu de DirectShow, lorsque cela est possible. Microsoft suggère que le code existant qui utilise les API héritées soit réécrit pour utiliser les nouvelles API si possible.]

La CAMSchedule classe implémente un planificateur pour les horloges de référence.

Méthodes publiques Description
CAMSchedule Méthode du constructeur.
~CAMSchedule Méthode de destructeur. Virtuel.
GetAdviseCount Récupère le nombre de demandes d’avis en attente.
GetNextAdviseTime Récupère l’heure de la demande d’avis suivante.
AddAdvisePacket Ajoute une demande d’avis à la liste des demandes en attente.
Annuler lavise Supprime une demande d’avis.
Conseiller Répartit toutes les demandes qui sont planifiées pour une heure spécifiée ou avant.
GetEvent Récupère un handle d’événement, qui est utilisé pour signaler un changement à l’heure d’avertissement suivante.

Notes

Cet objet d’assistance gère une liste de demandes d’avis pour une horloge de référence. La classe CBaseReferenceClock l’utilise pour planifier les demandes d’avis. Les horloges utilisent cet objet de la manière suivante :

  1. L’horloge crée un thread de travail pour gérer la planification.
  2. Le thread de travail appelle la méthode CAMSchedule::GetEvent pour récupérer un handle d’événement à partir du planificateur. Il attend cet événement, initialement avec un délai d’attente infini.
  3. Pour planifier une nouvelle demande d’avis, l’horloge appelle la méthode CAMSchedule::AddAdvisePacket . Une demande d’avis peut être ponctuelle ou périodique. Le planificateur conserve la liste des requêtes dans l’ordre du temps.
  4. Si une requête est ajoutée au début de la liste, le planificateur signale l’événement. (La liste étant vide au début, la première requête est garantie pour signaler l’événement.)
  5. Lorsque l’événement est signalé, le thread de travail appelle la méthode CAMSchedule::Advise , en spécifiant l’heure de référence actuelle. Si des demandes en attente ont expiré, le planificateur les distribue.
  6. La méthode Advise retourne l’heure de la requête suivante. Le thread de travail utilise cette valeur pour calculer une nouvelle valeur de délai d’attente.
  7. Les étapes 2 6 se répètent indéfiniment.
  8. Pour arrêter le thread de travail, l’horloge définit un indicateur interne et signale l’événement.

À l’étape 2, l’événement est signalé ou le délai d’attente est expiré. Si l’événement est signalé, cela signifie qu’une nouvelle demande a été ajoutée à l’avant de la liste. Le thread de travail doit calculer une nouvelle valeur de délai d’attente. D’autre part, si l’attente expire, cela signifie qu’une demande d’avis est arrivée à échéance et doit être envoyée. L’appel à Conseiller à l’étape 5 gère les deux cas.

Configuration requise

Condition requise Valeur
En-tête
Dsschedule.h (include Streams.h)
Bibliothèque
Strmbase.lib (builds de vente au détail) ;
Strmbasd.lib (builds de débogage)