Scheduler-Klasse
Stellt eine Abstraktion für einen Concurrency Runtime-Planer dar.
Syntax
class Scheduler;
Member
Geschützte Konstruktoren
Name | Beschreibung |
---|---|
Scheduler | Ein Objekt der Scheduler Klasse kann nur mithilfe von Factorymethoden oder implizit erstellt werden. |
~Scheduler Destructor | Ein Objekt der Scheduler Klasse wird implizit zerstört, wenn alle externen Verweise darauf nicht mehr vorhanden sind. |
Öffentliche Methoden
Name | Beschreibung |
---|---|
Anfügen | Fügt den Scheduler an den aufrufenden Kontext an. Nachdem diese Methode zurückgegeben wurde, wird der aufrufende Kontext vom Scheduler verwaltet, und der Scheduler wird zum aktuellen Planer. |
Erstellen | Erstellt einen neuen Scheduler, dessen Verhalten durch den _Policy Parameter beschrieben wird, platziert einen anfänglichen Verweis auf den Scheduler und gibt einen Zeiger darauf zurück. |
CreateScheduleGroup | Überladen. Erstellt eine neue Zeitplangruppe innerhalb des Schedulers. Die Version, die den Parameter _Placement verwendet, bewirkt, dass Aufgaben innerhalb der neu erstellten Zeitplangruppe auf die Ausführung an dem durch diesen Parameter angegebenen Speicherort verzerrt werden. |
GetNumberOfVirtualProcessors | Gibt die aktuelle Anzahl virtueller Prozessoren für den Scheduler zurück. |
GetPolicy | Gibt eine Kopie der Richtlinie zurück, mit der der Scheduler erstellt wurde. |
Id | Gibt einen eindeutigen Bezeichner für den Scheduler zurück. |
IsAvailableLocation | Bestimmt, ob ein bestimmter Standort im Scheduler verfügbar ist. |
Referenz | Erhöht die Anzahl der Planerverweise. |
RegisterShutdownEvent | Bewirkt, dass das übergebene Windows-Ereignishandle im _Event Parameter signalisiert wird, wenn der Planer heruntergefahren und selbst zerstört wird. Zu dem Zeitpunkt, zu dem das Ereignis signalisiert wird, ist alle für den Planer geplanten Arbeiten abgeschlossen. Mehrere Herunterfahren-Ereignisse können über diese Methode registriert werden. |
Release | Erhöht die Anzahl der Planerverweise. |
ResetDefaultSchedulerPolicy | Setzt die Standardplanerrichtlinie auf die Standardeinstellung für die Laufzeit zurück. Wenn ein Standardplaner das nächste Mal erstellt wird, verwendet er die Standardrichtlinieneinstellungen für die Laufzeit. |
ScheduleTask | Überladen. Plant einen leichtgewichtigen Vorgang innerhalb des Zeitplans. Der Vorgang mit geringem Gewicht wird in einer von der Laufzeit festgelegten Zeitplangruppe platziert. Die Version, die den Parameter _Placement verwendet, bewirkt, dass die Aufgabe auf die Ausführung an dem angegebenen Speicherort voreingenommen wird. |
SetDefaultSchedulerPolicy | Ermöglicht es einer benutzerdefinierten Richtlinie, den Standardplaner zu erstellen. Diese Methode kann nur aufgerufen werden, wenn kein Standardplaner innerhalb des Prozesses vorhanden ist. Nachdem eine Standardrichtlinie festgelegt wurde, bleibt sie bis zum nächsten gültigen Aufruf der SetDefaultSchedulerPolicy ResetDefaultSchedulerPolicy-Methode wirksam. |
Hinweise
Der Zeitgeber für parallele Runtime verwendet Ausführungskontexte, die den Ausführungskontexten des Betriebssystems, z. B. einem Thread, zugeordnet sind, um die von Der Anwendung in die Warteschlange eingereihte Arbeit auszuführen. Die Parallelitätsebene eines Schedulers entspricht jederzeit der Anzahl der virtuellen Prozessor, die ihm vom Ressourcen-Manager gewährt werden. Ein virtueller Prozessor ist eine Abstraktion für eine Verarbeitungsressource und wird einem Hardwarethread des zugrunde liegenden Systems zugeordnet. Nur ein einzelner Planerkontext kann jeweils auf einem virtuellen Prozessor ausgeführt werden.
Die Parallelitätslaufzeit erstellt einen Standardzeitplaner pro Prozess, um parallele Arbeit auszuführen. Darüber hinaus können Sie eigene Schedulerinstanzen erstellen und mithilfe dieser Klasse bearbeiten.
Vererbungshierarchie
Scheduler
Anforderungen
Kopfzeile: concrt.h
Namespace: Parallelität
Anfügen
Fügt den Scheduler an den aufrufenden Kontext an. Nachdem diese Methode zurückgegeben wurde, wird der aufrufende Kontext vom Scheduler verwaltet, und der Scheduler wird zum aktuellen Planer.
virtual void Attach() = 0;
Hinweise
Durch das Anfügen eines Schedulers wird implizit ein Verweis auf den Scheduler platziert.
Irgendwann in Zukunft müssen Sie die CurrentScheduler::D etach-Methode aufrufen, damit der Scheduler heruntergefahren werden kann.
Wenn diese Methode aus einem Kontext aufgerufen wird, der bereits einem anderen Planer zugeordnet ist, wird der vorhandene Planer als vorheriger Planer gespeichert, und der neu erstellte Scheduler wird zum aktuellen Planer. Wenn Sie die CurrentScheduler::Detach
Methode zu einem späteren Zeitpunkt aufrufen, wird der vorherige Planer als aktueller Planer wiederhergestellt.
Diese Methode löst eine improper_scheduler_attach Ausnahme aus, wenn dieser Scheduler der aktuelle Planer des aufrufenden Kontexts ist.
Erstellen
Erstellt einen neuen Scheduler, dessen Verhalten durch den _Policy
Parameter beschrieben wird, platziert einen anfänglichen Verweis auf den Scheduler und gibt einen Zeiger darauf zurück.
static Scheduler* __cdecl Create(const SchedulerPolicy& _Policy);
Parameter
_Politik
Die Schedulerrichtlinie, die das Verhalten des neu erstellten Zeitplans beschreibt.
Rückgabewert
Ein Zeiger auf einen neu erstellten Zeitplan. Dieses Scheduler
Objekt verfügt über eine anfängliche Referenzanzahl, die darauf platziert wird.
Hinweise
Nachdem ein Scheduler mit der Create
Methode erstellt wurde, müssen Sie die Release
Methode zu einem bestimmten Zeitpunkt aufrufen, um die anfängliche Referenzanzahl zu entfernen und dem Scheduler das Herunterfahren zu ermöglichen.
Ein mit dieser Methode erstellter Scheduler ist nicht mit dem aufrufenden Kontext verknüpft. Sie kann mithilfe der Attach-Methode an einen Kontext angefügt werden.
Diese Methode kann eine Vielzahl von Ausnahmen auslösen, einschließlich scheduler_resource_allocation_error und invalid_scheduler_policy_value.
CreateScheduleGroup
Erstellt eine neue Zeitplangruppe innerhalb des Schedulers. Die Version, die den Parameter _Placement
verwendet, bewirkt, dass Aufgaben innerhalb der neu erstellten Zeitplangruppe auf die Ausführung an dem durch diesen Parameter angegebenen Speicherort verzerrt werden.
virtual ScheduleGroup* CreateScheduleGroup() = 0;
virtual ScheduleGroup* CreateScheduleGroup(location& _Placement) = 0;
Parameter
_Platzierung
Ein Verweis auf einen Ort, an dem die Vorgänge innerhalb der Terminplangruppe in Bezug auf die Ausführung verzerrt sind.
Rückgabewert
Ein Zeiger auf die neu erstellte Zeitplangruppe. Dieses ScheduleGroup
Objekt verfügt über eine anfängliche Referenzanzahl, die darauf platziert wird.
Hinweise
Sie müssen die Release-Methode für eine Zeitplangruppe aufrufen, wenn Sie die Planung der Arbeit abgeschlossen haben. Der Planer zerstört die Zeitplangruppe, wenn alle damit in die Warteschlange eingereihten Arbeiten abgeschlossen sind.
Beachten Sie, dass Sie, wenn Sie diesen Zeitplan explizit erstellt haben, alle Verweise auf Zeitplangruppen freigeben müssen, bevor Sie Ihre Verweise für den Zeitplaner freigeben.
GetNumberOfVirtualProcessors
Gibt die aktuelle Anzahl virtueller Prozessoren für den Scheduler zurück.
virtual unsigned int GetNumberOfVirtualProcessors() const = 0;
Rückgabewert
Die aktuelle Anzahl virtueller Prozessoren für den Scheduler.
GetPolicy
Gibt eine Kopie der Richtlinie zurück, mit der der Scheduler erstellt wurde.
virtual SchedulerPolicy GetPolicy() const = 0;
Rückgabewert
Eine Kopie der Richtlinie, mit der der Zeitplaner erstellt wurde.
Kennung
Gibt einen eindeutigen Bezeichner für den Scheduler zurück.
virtual unsigned int Id() const = 0;
Rückgabewert
Ein eindeutiger Bezeichner für den Scheduler.
IsAvailableLocation
Bestimmt, ob ein bestimmter Standort im Scheduler verfügbar ist.
virtual bool IsAvailableLocation(const location& _Placement) const = 0;
Parameter
_Platzierung
Ein Verweis auf den Speicherort, um den Zeitplan abzufragen.
Rückgabewert
Ein Hinweis darauf, ob der durch das _Placement
Argument angegebene Ort für den Zeitplan verfügbar ist.
Hinweise
Beachten Sie, dass der Rückgabewert ein sofortiges Sampling ist, ob der angegebene Speicherort verfügbar ist. In Anwesenheit mehrerer Planer kann die dynamische Ressourcenverwaltung jederzeit Ressourcen von Planern hinzufügen oder wegnehmen. Sollte dies geschehen, kann der angegebene Standort die Verfügbarkeit ändern.
Verweis
Erhöht die Anzahl der Planerverweise.
virtual unsigned int Reference() = 0 ;
Rückgabewert
Die neu inkrementierte Referenzanzahl.
Hinweise
Dies wird in der Regel verwendet, um die Lebensdauer des Zeitplans für die Komposition zu verwalten. Wenn die Referenzanzahl eines Schedulers auf Null fällt, wird der Planer heruntergefahren und destruktiert, nachdem alle Arbeiten am Planer abgeschlossen wurden.
Die Methode löst eine improper_scheduler_reference Ausnahme aus, wenn die Verweisanzahl vor dem Aufrufen der Reference
Methode null war und der Aufruf aus einem Kontext erfolgt, der nicht im Besitz des Schedulers ist.
RegisterShutdownEvent
Bewirkt, dass das übergebene Windows-Ereignishandle im _Event
Parameter signalisiert wird, wenn der Planer heruntergefahren und selbst zerstört wird. Zu dem Zeitpunkt, zu dem das Ereignis signalisiert wird, ist alle für den Planer geplanten Arbeiten abgeschlossen. Mehrere Herunterfahren-Ereignisse können über diese Methode registriert werden.
virtual void RegisterShutdownEvent(HANDLE _Event) = 0;
Parameter
_Ereignis
Ein Handle zu einem Windows-Ereignisobjekt, das von der Laufzeit signalisiert wird, wenn der Scheduler heruntergefahren und zerstört.
Freigabe
Erhöht die Anzahl der Planerverweise.
virtual unsigned int Release() = 0;
Rückgabewert
Die neu erhöhte Bezugsanzahl.
Hinweise
Dies wird in der Regel verwendet, um die Lebensdauer des Zeitplans für die Komposition zu verwalten. Wenn die Referenzanzahl eines Schedulers auf Null fällt, wird der Planer heruntergefahren und destruktiert, nachdem alle Arbeiten am Planer abgeschlossen wurden.
ResetDefaultSchedulerPolicy
Setzt die Standardplanerrichtlinie auf die Standardeinstellung für die Laufzeit zurück. Wenn ein Standardplaner das nächste Mal erstellt wird, verwendet er die Standardrichtlinieneinstellungen für die Laufzeit.
static void __cdecl ResetDefaultSchedulerPolicy();
Hinweise
Diese Methode kann aufgerufen werden, während ein Standardplaner innerhalb des Prozesses vorhanden ist. Sie wirkt sich nicht auf die Richtlinie des vorhandenen Standardzeitplanrs aus. Wenn der Standardplaner jedoch heruntergefahren werden sollte und zu einem späteren Zeitpunkt ein neuer Standardwert erstellt werden soll, verwendet der neue Planer die Standardrichtlinieneinstellungen der Laufzeit.
Scheduler
Ein Objekt der Scheduler
Klasse kann nur mithilfe von Factorymethoden oder implizit erstellt werden.
Scheduler();
Hinweise
Der Standardplaner des Prozesses wird implizit erstellt, wenn Sie viele der Laufzeitfunktionen verwenden, die einen Scheduler an den aufrufenden Kontext anfügen müssen. Methoden innerhalb der Klassen und Features der PPL- und Agentsebenen führen in der CurrentScheduler
Regel implizite Anlagen aus.
Sie können einen Zeitplan auch explizit über die CurrentScheduler::Create
Methode oder die Scheduler::Create
Methode erstellen.
~Scheduler
Ein Objekt der Scheduler
Klasse wird implizit zerstört, wenn alle externen Verweise darauf nicht mehr vorhanden sind.
virtual ~Scheduler();
ScheduleTask
Plant einen leichtgewichtigen Vorgang innerhalb des Zeitplans. Der Vorgang mit geringem Gewicht wird in einer von der Laufzeit festgelegten Zeitplangruppe platziert. Die Version, die den Parameter _Placement
verwendet, bewirkt, dass die Aufgabe auf die Ausführung an dem angegebenen Speicherort voreingenommen wird.
virtual void ScheduleTask(
TaskProc _Proc,
_Inout_opt_ void* _Data) = 0;
virtual void ScheduleTask(
TaskProc _Proc,
_Inout_opt_ void* _Data,
location& _Placement) = 0;
Parameter
_Proc
Ein Zeiger auf die Funktion, die ausgeführt werden soll, um den Textkörper der Leichtgewichtsaufgabe auszuführen.
_Daten
Ein leerer Zeiger auf die Daten, die als Parameter an den Textkörper der Aufgabe übergeben werden.
_Platzierung
Ein Verweis auf einen Ort, an dem der Vorgang mit geringem Gewicht auf die Ausführung ausgerichtet ist.
SetDefaultSchedulerPolicy
Ermöglicht es einer benutzerdefinierten Richtlinie, den Standardplaner zu erstellen. Diese Methode kann nur aufgerufen werden, wenn kein Standardplaner innerhalb des Prozesses vorhanden ist. Nachdem eine Standardrichtlinie festgelegt wurde, bleibt sie bis zum nächsten gültigen Aufruf der SetDefaultSchedulerPolicy
ResetDefaultSchedulerPolicy-Methode wirksam.
static void __cdecl SetDefaultSchedulerPolicy(const SchedulerPolicy& _Policy);
Parameter
_Politik
Die Richtlinie, die als Standardplanerrichtlinie festgelegt werden soll.
Hinweise
Wenn die SetDefaultSchedulerPolicy
Methode aufgerufen wird, wenn ein Standardplaner bereits innerhalb des Prozesses vorhanden ist, löst die Laufzeit eine default_scheduler_exists Ausnahme aus.
Siehe auch
Concurrency-Namespace
Scheduler-Klasse
PolicyElementKey
Aufgabenplanung