CCmdQueue-Klasse
[Das dieser Seite zugeordnete Feature DirectShow ist ein Legacyfeature. Es wurde von MediaPlayer, IMFMediaEngine und Audio/Video Capture in Media Foundation abgelöst. Diese Features wurden für Windows 10 und Windows 11 optimiert. Microsoft empfiehlt dringend, dass neuer Code mediaPlayer, IMFMediaEngine und Audio/Video Capture in Media Foundation anstelle von DirectShow verwendet, wenn möglich. Microsoft schlägt vor, dass vorhandener Code, der die Legacy-APIs verwendet, so umgeschrieben wird, dass nach Möglichkeit die neuen APIs verwendet werden.]
Die CCmdQueue
-Klasse ist eine Basisklasse, die eine Warteschlange mit CDeferredCommand-Objekten und Memberfunktionen zum Hinzufügen, Entfernen, Überprüfen status und Aufrufen der Befehle in der Warteschlange bereitstellt. Ein CCmdQueue
-Objekt ist Teil eines Objekts, das IQueueCommand-Methoden implementiert. Der Filtergraph-Manager implementiert IQueueCommand-Methoden , damit Anwendungen Befehle im Filterdiagramm in die Warteschlange stellen können. Filter, die die IQueueCommand-Schnittstelle direkt implementieren, verwenden diese Klasse. Wenn Sie CDeferredCommand-Objekte verwenden möchten, muss Ihre Warteschlange von dieser Klasse abgeleitet werden.
Es gibt zwei Synchronisierungsmodi: grob und genau. Im groben Modus wartet die Anwendung, bis ein angegebener Zeitpunkt eintrifft, und führt dann den Befehl aus. Im präzisen Modus wartet die Anwendung, bis die Verarbeitung des zu diesem Zeitpunkt angezeigten Beispiels beginnt, und führt dann den Befehl aus. Der Filter bestimmt, welche er implementieren wird. Der Filtergraph-Manager implementiert immer den groben Modus für Befehle, die im Filtergraph-Manager in die Warteschlange eingereiht werden.
Wenn Sie eine grobe Synchronisierung wünschen, sollten Sie wahrscheinlich warten, bis ein Befehl fällig ist, und ihn dann ausführen. Dazu können Sie CCmdQueue::GetDueCommand aufrufen. Wenn Sie auf mehrere Dinge warten müssen, rufen Sie das Ereignishandle von CCmdQueue::GetDueHandle ab, und rufen Sie dann CCmdQueue::GetDueCommand auf, wenn dies signalisiert wird. Die Streamzeit wird nur zwischen Aufrufen der CCmdQueue::Run - und CCmdQueue::EndRun-Memberfunktionen voranschreiten. Es gibt keine Garantie dafür, dass ein Befehl bereit ist, wenn das Handle festgelegt ist. Rufen Sie jedes Mal, wenn das Ereignis signalisiert wird, die Memberfunktion GetDueCommand auf (wahrscheinlich mit einem Timeout von null); Dies kann E_ABORT zurückgeben, wenn kein Befehl bereit ist.
Wenn Sie eine genaue Synchronisierung wünschen, rufen Sie die Memberfunktion CCmdQueue::GetCommandDueFor auf, und übergeben Sie die Beispiele, die Sie verarbeiten möchten, als Parameter. Dadurch wird Folgendes zurückgegeben:
- Ein Streamzeitbefehl, der um oder vor dieser Streamzeit fällig ist.
- Ein Präsentationszeitbefehl, der um oder vor der Darstellung der Streamzeit fällig ist. Führen Sie dies nur zwischen den Memberfunktionen CCmdQueue::Run und CCmdQueue::EndRun aus, da außerhalb dieser Funktion die Zuordnung von der Streamzeit zur Präsentationszeit nicht bekannt ist.
- Alle jetzt fälligen Präsentationszeitbefehle.
Wenn Sie eine genaue Synchronisierung für Beispiele wünschen, die möglicherweise während des angehaltenen Modus verarbeitet werden, müssen Sie Streamzeitbefehle verwenden.
In allen Fällen bleiben Befehle in der Warteschlange, bis sie aufgerufen oder abgebrochen werden. Die Einstellung und das Zurücksetzen des Ereignishandles werden vollständig von diesem Warteschlangenobjekt verwaltet.
Geschützte Datenmember | Beschreibung |
---|---|
m_bRunning | Flag für den Ausführungsstatus; Legen Sie true fest, wenn Sie ausgeführt werden. |
m_dwAdvise | Empfehlungsbezeichner aus der Referenzuhr (null, wenn kein ausstehender Ratschlag vorhanden ist). |
m_evDue | Legt den Zeitpunkt fest, zu dem Befehle fällig sind. |
m_listPresentation | Speichert Befehle, die in der Präsentationszeit in die Warteschlange eingereiht werden. |
m_listStream | Speichert Befehle, die in der Streamzeit in die Warteschlange eingereiht werden. |
m_Lock | Schützt den Zugriff auf Listen. |
m_pClock | Aktuelle Referenzuhr. |
m_StreamTimeOffset | Enthält den Streamzeitoffset, wenn m_bRunningTRUE ist. |
m_StreamTimeOffset | Enthält den Streamzeitoffset, wenn m_bRunningTRUE ist. |
Elementfunktionen | Beschreibung |
CCmdQueue | Erstellt ein CCmdQueue-Objekt . |
CheckTime | Bestimmt, ob eine bestimmte Zeit fällig ist. |
GetDueHandle | Ruft das Ereignishandle ab, das signalisiert wird. |
Überschreibbare Memberfunktionen | Beschreibung |
EndRun | Wechselt in den angehaltenen oder angehaltenen Modus. |
GetCommandDueFor | Ruft einen verzögerten Befehl ab, der zu einem bestimmten Zeitpunkt geplant wird. |
GetDueCommand | Ruft einen Zeiger auf den nächsten fälligen Befehl ab. |
Einfügen | Fügt der Warteschlange das CDeferredCommand-Objekt hinzu. |
Neu | Initialisiert einen auszuführenden Befehl und gibt ein neues CDeferredCommand-Objekt zurück. |
Remove | Entfernt das CDeferredCommand-Objekt aus der Warteschlange. |
Ausführung | Wechselt in den aktiven Modus. |
SetSyncSource | Legt die Uhr fest, die für die Zeitsteuerung verwendet wird. |
SetTimeAdvise | Richtet ein Timerereignis mit der Referenzuhr ein. |