Freigeben über


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.