CCmdQueue, classe
La CCmdQueue classe est une classe de base qui fournit une file d’attente d’objets CDeferredCommand et des fonctions membres pour ajouter, supprimer, vérifier l’État 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 graphes de filtre implémente les méthodes IQueueCommand afin que les applications puissent mettre les commandes en file d’attente dans 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 : grossiste et précis. En mode grossiste, l’application attend jusqu’à ce qu’une heure spécifiée arrive, puis exécute la commande. En mode exact, l’application attend que le traitement commence sur l’exemple qui s’affiche à l’heure, puis exécute la commande. Le filtre détermine celui qu’il doit implémenter. Le gestionnaire de graphes de filtre implémente toujours le mode grossiste pour les commandes mises en file d’attente au niveau du gestionnaire de graphique de filtre.
Si vous souhaitez une synchronisation grossière, vous souhaiterez probablement attendre qu’une commande soit en cours, puis l’exécuter. Pour ce faire, vous pouvez appeler CCmdQueue :: GetDueCommand. Si vous avez plusieurs éléments à attendre, récupérez le descripteur d’événement à partir de CCmdQueue :: GetDueHandle , puis appelez CCmdQueue :: GetDueCommand quand ce est signalé. le temps de flux est avancé uniquement entre les appels aux fonctions membres CCmdQueue :: Run et CCmdQueue :: EndRun . Il n’y a aucune garantie que si le descripteur est défini, une commande est 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 allez traiter en tant que paramètre. Cela retourne ce qui suit :
- Commande de flux de temps due à ou avant cette heure de flux.
- Commande au moment de la présentation due à ou avant la présentation du temps de flux. Procédez ainsi uniquement entre les fonctions membres CCmdQueue :: Run et CCmdQueue :: EndRun , car en dehors de ce, le mappage du temps de flux à l’heure de présentation n’est pas connu.
- Toute commande de présentation en attente.
Si vous souhaitez une synchronisation précise des exemples qui peuvent être traités en mode suspendu, vous devez utiliser des commandes en continu.
Dans tous les cas, les commandes restent mises en file d’attente jusqu’à ce qu’elles soient appelées ou annulées. Le paramètre et la réinitialisation du descripteur d’événement sont gérés entièrement par cet objet de file d’attente.
| Membres de données protégés | Description |
|---|---|
| m _ bRunning | Indicateur d’État en cours d’exécution ; Affectez la valeur true lors de l’exécution de. |
| m _ dwAdvise | Identificateur de notification de l’horloge de référence (zéro si aucune notification n’est en suspens). |
| m _ evDue | Définit l’heure d’échéance des commandes. |
| m _ listPresentation | Stocke les commandes mises en file d’attente au moment de la présentation. |
| m _ listStream | Stocke les commandes mises en file d’attente dans le temps de flux. |
| _verrou m | Protège l’accès aux listes. |
| m _ pClock | Horloge de référence actuelle. |
| m _ StreamTimeOffset | Contient l’offset de temps de flux lorsque m _ bRunning a la valeur true. |
| m _ StreamTimeOffset | Contient l’offset de temps de flux lorsque m _ bRunning a la valeur true. |
| Fonctions de membre | Description |
| CCmdQueue | Construit un objet CCmdQueue . |
| CheckTime | Détermine si une heure donnée est due. |
| 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 | Bascule en mode exécution. |
| SetSyncSource | Définit l’horloge utilisée pour le minutage. |
| SetTimeAdvise | Configure un événement de minuterie avec l’horloge de référence. |