Classe CCmdQueue

[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 CCmdQueue classe est une classe de base qui fournit une file d’attente d’objets CDeferredCommand et de fonctions membres pour ajouter, supprimer, case activée status et appeler les commandes mises en file d’attente. Un CCmdQueue objet fait partie d’un objet qui implémente des méthodes IQueueCommand . Le gestionnaire de graphe de filtre implémente les méthodes IQueueCommand afin que les applications puissent mettre en file d’attente les commandes vers le graphique de filtre. Les filtres qui implémentent l’interface IQueueCommand utilisent directement cette classe. Si vous souhaitez utiliser des objets CDeferredCommand , votre file d’attente doit être dérivée de cette classe.

Il existe deux modes de synchronisation : grossière et précise. En mode grossière, l’application attend qu’une heure spécifiée arrive, puis exécute la commande. En mode précis, l’application attend que le traitement commence sur l’exemple qui apparaît à l’époque, puis exécute la commande. Le filtre détermine celui qu’il implémentera. Le gestionnaire de graphe de filtre implémente toujours le mode grosseur pour les commandes qui sont mises en file d’attente dans le gestionnaire de graphe de filtre.

Si vous souhaitez une synchronisation grossière, vous souhaitez probablement attendre qu’une commande soit due, puis l’exécuter. Pour ce faire, appelez CCmdQueue::GetDueCommand. Si vous avez plusieurs choses à attendre, obtenez le handle d’événement à partir de CCmdQueue::GetDueHandle , puis appelez CCmdQueue::GetDueCommand lorsque cela est signalé. L’heure du flux n’avance qu’entre les appels aux fonctions membres CCmdQueue::Run et CCmdQueue::EndRun . Il n’est pas garanti que si le handle est défini, une commande sera prête. Chaque fois que l’événement est signalé, appelez la fonction membre GetDueCommand (probablement avec un délai d’expiration de zéro) ; cela peut retourner E_ABORT si aucune commande n’est prête.

Si vous souhaitez une synchronisation précise, appelez la fonction membre CCmdQueue::GetCommandDueFor et transmettez les exemples que vous êtes sur le point de traiter en tant que paramètre. Cette opération retourne les éléments suivants :

  • Commande au moment du flux qui est due avant ou à l’heure du flux.
  • Commande d’heure de présentation due avant ou avant la présentation de l’heure du flux. Effectuez cette opération uniquement entre les fonctions membres CCmdQueue::Run et CCmdQueue::EndRun , car en dehors de cela, le mappage de l’heure du flux à l’heure de présentation n’est pas connu.
  • Toute commande au moment de la présentation est maintenant à échéance.

Si vous souhaitez une synchronisation précise pour les exemples qui peuvent être traités en mode suspendu, vous devez utiliser des commandes au moment du flux.

Dans tous les cas, les commandes restent en file d’attente jusqu’à ce qu’elles soient appelées ou annulées. Le paramètre et la réinitialisation du handle d’événement sont entièrement gérés par cet objet de file d’attente.

Membres de données protégés Description
m_bRunning Indicateur de l’état en cours d’exécution ; définissez TRUE lors de l’exécution.
m_dwAdvise Identificateur d’avertissement de l’horloge de référence (zéro si aucun avis en suspens).
m_evDue Définit l’heure d’échéance des commandes.
m_listPresentation Stocke les commandes mises en file d’attente dans l’heure de présentation.
m_listStream Stocke les commandes mises en file d’attente dans le temps de flux.
m_Lock Protège l’accès aux listes.
m_pClock Horloge de référence actuelle.
m_StreamTimeOffset Contient le décalage de temps de flux lorsque m_bRunning a la valeur TRUE.
m_StreamTimeOffset Contient le décalage de temps de flux lorsque m_bRunning a la valeur TRUE.
Fonctions de membre Description
CCmdQueue Construit un objet CCmdQueue .
CheckTime Détermine si un délai donné est dû.
GetDueHandle Récupère le handle d’événement qui sera signalé.
Fonctions membres substituables Description
EndRun Bascule en mode arrêté ou suspendu.
GetCommandDueFor Récupère une commande différée planifiée à une heure spécifiée.
GetDueCommand Récupère un pointeur vers la commande suivante qui est due.
Insérer Ajoute l’objet CDeferredCommand à la file d’attente.
Nouveau Initialise une commande à exécuter et retourne un nouvel objet CDeferredCommand .
Supprimer Supprime l’objet CDeferredCommand de la file d’attente.
Exécuter Passe en mode d’exécution.
SetSyncSource Définit l’horloge utilisée pour le minutage.
SetTimeAdvise Configure un événement de minuteur avec l’horloge de référence.