Freigeben über


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, wird sie bis zum nächsten gültigen Aufruf der SetDefaultSchedulerPolicyResetDefaultSchedulerPolicy-Methode erneut Standard.

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.

Id

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, wird sie bis zum nächsten gültigen Aufruf der SetDefaultSchedulerPolicyResetDefaultSchedulerPolicy-Methode erneut Standard.

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