Freigeben über


CAMSchedule-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 CAMSchedule -Klasse implementiert einen Scheduler für Referenzuhren.

Öffentliche Methoden BESCHREIBUNG
CAMSchedule Konstruktormethode.
~CAMSchedule Destruktormethode. Virtuellen.
GetAdviseCount Ruft die Anzahl der ausstehenden Beratungsanforderungen ab.
GetNextAdviseTime Ruft den Zeitpunkt der nächsten Empfehlungsanforderung ab.
AddAdvisePacket Fügt der Liste der ausstehenden Anforderungen eine Empfehlungsanforderung hinzu.
Unadvise Entfernt eine Empfehlungsanforderung.
Beraten Sendet alle Anforderungen, die für einen bestimmten Zeitpunkt oder früher geplant sind.
Getevent Ruft ein Ereignishandle ab, das verwendet wird, um eine Änderung bei der nächsten Empfehlung zu signalisieren.

Bemerkungen

Dieses Hilfsobjekt verwaltet eine Liste von Beratungsanforderungen für eine Referenzuhr. Die CBaseReferenceClock-Klasse verwendet sie, um Beratungsanfragen zu planen. Uhren verwenden dieses Objekt auf folgende Weise:

  1. Die Uhr erstellt einen Workerthread für die Planung.
  2. Der Workerthread ruft die CAMSchedule::GetEvent-Methode auf, um ein Ereignishandle vom Scheduler abzurufen. Es wartet auf dieses Ereignis, zunächst mit einem unendlichen Timeout.
  3. Um eine neue Empfehlungsanforderung zu planen, ruft die Uhr die CAMSchedule::AddAdvisePacket-Methode auf. Eine Empfehlungsanfrage kann ein Schuss oder regelmäßig sein. Der Scheduler führt die Liste der Anforderungen in der Zeitreihenfolge.
  4. Wenn eine Anforderung am Anfang der Liste hinzugefügt wird, signalisiert der Planer das Ereignis. (Die Liste ist zunächst leer, sodass die erste Anforderung garantiert das Ereignis signalisiert.)
  5. Wenn das Ereignis signalisiert wird, ruft der Workerthread die CAMSchedule::Advise-Methode auf und gibt die aktuelle Referenzzeit an. Wenn ausstehende Anforderungen abgelaufen sind, werden sie vom Planer verteilt.
  6. Die Advise-Methode gibt den Zeitpunkt der nächsten Anforderung zurück. Der Workerthread verwendet diesen Wert, um einen neuen Timeoutwert zu berechnen.
  7. Schritte 2 6 werden unbegrenzt wiederholt.
  8. Um den Workerthread zu beenden, legt die Uhr ein internes Flag fest und signalisiert das Ereignis.

In Schritt 2 wird entweder das Ereignis signalisiert oder das Wartezeitüberschreitungsout. Wenn das Ereignis signalisiert wird, bedeutet dies, dass eine neue Anforderung am Anfang der Liste hinzugefügt wurde. Der Workerthread muss einen neuen Timeoutwert berechnen. Auf der anderen Seite bedeutet dies, dass bei einem Timeout der Wartezeit eine Beratungsanfrage fällig ist und versendet werden muss. Der Aufruf von Advise in Schritt 5 behandelt beide Fälle.

Anforderungen

Anforderung Wert
Header
Dsschedule.h (Einschließen von Streams.h)
Bibliothek
Strmbase.lib (Einzelhandelsbuilds);
Strmbasd.lib (Debugbuilds)