Třída plánovače
Představuje abstrakci plánovače concurrency Runtime.
Syntaxe
class Scheduler;
Členové
Chráněné konstruktory
Název | Popis |
---|---|
Scheduler | Objekt Scheduler třídy lze vytvořit pouze pomocí metod továrny nebo implicitně. |
~Scheduler – destruktor | Objekt Scheduler třídy je implicitně zničen, když všechny externí odkazy na ni přestanou existovat. |
Veřejné metody
Název | Popis |
---|---|
Attach | Připojí plánovač k kontextu volání. Po vrácení této metody se kontext volání spravuje plánovačem a plánovač se stane aktuálním plánovačem. |
Vytvořit | Vytvoří nový plánovač, jehož chování je popsáno parametrem _Policy , umístí do plánovače počáteční odkaz a vrátí ukazatel na něj. |
CreateScheduleGroup | Přetíženo. Vytvoří novou skupinu plánů v rámci plánovače. Verze, která přebírá parametr _Placement , způsobí, že úkoly v nově vytvořené skupině plánů budou zkreslené vůči provádění v umístění určeném tímto parametrem. |
GetNumberOfVirtualProcessors | Vrátí aktuální počet virtuálních procesorů pro plánovač. |
GetPolicy | Vrátí kopii zásady, se kterou byl plánovač vytvořen. |
Id | Vrátí jedinečný identifikátor plánovače. |
IsAvailableLocation | Určuje, jestli je dané umístění dostupné v plánovači. |
Odkaz | Zvýší počet odkazů plánovače. |
RegisterShutdownEvent | Způsobí, že obslužná rutina události Systému Windows předaná v parametru _Event bude signalována, když plánovač vypne a zničí sám sebe. V době, kdy je událost signalizována, je dokončena veškerá práce naplánovaná plánovači. Tuto metodu lze zaregistrovat více událostí vypnutí. |
Vydaná verze | Sníží počet odkazů plánovače. |
ResetDefaultSchedulerPolicy | Obnoví výchozí zásadu plánovače na výchozí hodnotu modulu runtime. Při příštím vytvoření výchozího plánovače použije výchozí nastavení zásad modulu runtime. |
ScheduleTask | Přetíženo. Naplánuje v plánovači lehkou úlohu. Úloha s nízkou hmotností bude umístěna ve skupině plánu určené modulem runtime. Verze, která přebírá parametr _Placement , způsobí, že úloha bude zkreslená vůči spuštění v zadaném umístění. |
SetDefaultSchedulerPolicy | Umožňuje použití uživatelem definovaných zásad k vytvoření výchozího plánovače. Tuto metodu lze volat pouze v případě, že v procesu neexistuje žádný výchozí plánovač. Po nastavení výchozí zásady zůstane v platnosti až do dalšího platného volání SetDefaultSchedulerPolicy metody ResetDefaultSchedulerPolicy . |
Poznámky
Plánovač Concurrency Runtime používá kontexty spuštění, které se mapují na kontexty spouštění operačního systému, jako je vlákno, ke spuštění práce zařazené do fronty vaší aplikací. Úroveň souběžnosti plánovače se kdykoli rovná počtu virtuálních procesorů udělených Resource Managerem. Virtuální procesor je abstrakce pro prostředek zpracování a mapuje se na hardwarové vlákno v podkladovém systému. V daném okamžiku se na virtuálním procesoru může spustit pouze jeden kontext plánovače.
Modul Concurrency Runtime vytvoří výchozí plánovač pro každý proces, který provede paralelní práci. Kromě toho můžete vytvořit vlastní instance plánovače a manipulovat s nimi pomocí této třídy.
Hierarchie dědičnosti
Scheduler
Požadavky
Hlavička: concrt.h
Namespace: souběžnost
Připojit
Připojí plánovač k kontextu volání. Po vrácení této metody se kontext volání spravuje plánovačem a plánovač se stane aktuálním plánovačem.
virtual void Attach() = 0;
Poznámky
Připojení plánovače implicitně umístí odkaz na plánovač.
V určitém okamžiku v budoucnu musíte volat CurrentScheduler::D etach metoda, aby plánovač mohl vypnout.
Pokud je tato metoda volána z kontextu, který je již připojen k jinému plánovači, stávající plánovač se zapamatuje jako předchozí plánovač a nově vytvořený plánovač se stane aktuálním plánovačem. Při volání CurrentScheduler::Detach
metody v pozdějším bodě se předchozí plánovač obnoví jako aktuální plánovač.
Tato metoda vyvolá improper_scheduler_attach výjimku, pokud je tento plánovač aktuálním plánovačem kontextu volání.
Vytvoření
Vytvoří nový plánovač, jehož chování je popsáno parametrem _Policy
, umístí do plánovače počáteční odkaz a vrátí ukazatel na něj.
static Scheduler* __cdecl Create(const SchedulerPolicy& _Policy);
Parametry
_Politika
Zásady plánovače, které popisují chování nově vytvořeného plánovače.
Návratová hodnota
Ukazatel na nově vytvořený plánovač Tento Scheduler
objekt má vložený počáteční počet odkazů.
Poznámky
Po vytvoření plánovače s metodou Create
je nutné volat Release
metodu v určitém okamžiku v budoucnu, aby se odebral počáteční počet odkazů a umožnil plánovač vypnout.
Plánovač vytvořený pomocí této metody není připojen k kontextu volání. Lze jej připojit k kontextu pomocí metody Attach .
Tato metoda může vyvolat řadu výjimek, včetně scheduler_resource_allocation_error a invalid_scheduler_policy_value.
CreateScheduleGroup
Vytvoří novou skupinu plánů v rámci plánovače. Verze, která přebírá parametr _Placement
, způsobí, že úkoly v nově vytvořené skupině plánů budou zkreslené vůči provádění v umístění určeném tímto parametrem.
virtual ScheduleGroup* CreateScheduleGroup() = 0;
virtual ScheduleGroup* CreateScheduleGroup(location& _Placement) = 0;
Parametry
_Umístění
Odkaz na umístění, ve kterém se úkoly v rámci skupiny plánů předsunou k provádění.
Návratová hodnota
Ukazatel na nově vytvořenou skupinu plánů Tento ScheduleGroup
objekt má vložený počáteční počet odkazů.
Poznámky
Po dokončení plánování práce na ní musíte vyvolat metodu Release ve skupině plánů. Plánovač zničí skupinu plánů, jakmile se dokončí všechna práce zařazená do fronty.
Mějte na paměti, že pokud jste tento plánovač explicitně vytvořili, musíte před vydáním odkazů v plánovači uvolnit všechny odkazy na skupiny plánů.
GetNumberOfVirtualProcessors
Vrátí aktuální počet virtuálních procesorů pro plánovač.
virtual unsigned int GetNumberOfVirtualProcessors() const = 0;
Návratová hodnota
Aktuální počet virtuálních procesorů pro plánovač.
GetPolicy
Vrátí kopii zásady, se kterou byl plánovač vytvořen.
virtual SchedulerPolicy GetPolicy() const = 0;
Návratová hodnota
Kopie zásady, se kterou byl plánovač vytvořen.
ID
Vrátí jedinečný identifikátor plánovače.
virtual unsigned int Id() const = 0;
Návratová hodnota
Jedinečný identifikátor plánovače.
IsAvailableLocation
Určuje, jestli je dané umístění dostupné v plánovači.
virtual bool IsAvailableLocation(const location& _Placement) const = 0;
Parametry
_Umístění
Odkaz na umístění pro dotazování plánovače.
Návratová hodnota
Označení, zda je umístění určené argumentem _Placement
k dispozici v plánovači.
Poznámky
Všimněte si, že návratová hodnota je okamžité vzorkování toho, jestli je dané umístění dostupné. Při přítomnosti více plánovačů může dynamická správa prostředků přidávat nebo od plánovačů v libovolném okamžiku od zdrojů od zdrojů. Pokud k tomu dojde, může dané umístění změnit dostupnost.
Reference
Zvýší počet odkazů plánovače.
virtual unsigned int Reference() = 0 ;
Návratová hodnota
Nově navýšený počet odkazů.
Poznámky
Obvykle se používá ke správě životnosti plánovače pro složení. Když počet odkazů plánovače klesne na nulu, plánovač se po dokončení všech prací na plánovači vypne a destrukuje.
Metoda vyvolá improper_scheduler_reference výjimku, pokud počet odkazů před voláním Reference
metody byl nula a volání je provedeno z kontextu, který není vlastníkem plánovače.
RegisterShutdownEvent
Způsobí, že obslužná rutina události Systému Windows předaná v parametru _Event
bude signalována, když plánovač vypne a zničí sám sebe. V době, kdy je událost signalizována, je dokončena veškerá práce naplánovaná plánovači. Tuto metodu lze zaregistrovat více událostí vypnutí.
virtual void RegisterShutdownEvent(HANDLE _Event) = 0;
Parametry
_Událost
Popisovač objektu události Systému Windows, který bude signalován modulem runtime, když plánovač vypne a zničí sám sebe.
Verze
Sníží počet odkazů plánovače.
virtual unsigned int Release() = 0;
Návratová hodnota
Nově dekrementovaný počet odkazů.
Poznámky
Obvykle se používá ke správě životnosti plánovače pro složení. Když počet odkazů plánovače klesne na nulu, plánovač se po dokončení všech prací na plánovači vypne a destrukuje.
ResetDefaultSchedulerPolicy
Obnoví výchozí zásadu plánovače na výchozí hodnotu modulu runtime. Při příštím vytvoření výchozího plánovače použije výchozí nastavení zásad modulu runtime.
static void __cdecl ResetDefaultSchedulerPolicy();
Poznámky
Tuto metodu lze volat, když v procesu existuje výchozí plánovač. Nebude mít vliv na zásady stávajícího výchozího plánovače. Pokud by se ale výchozí plánovač vypínáním a v pozdějším bodě se vytvořil nový výchozí výchozí, použije nový plánovač výchozí nastavení zásad modulu runtime.
Scheduler
Objekt Scheduler
třídy lze vytvořit pouze pomocí metod továrny nebo implicitně.
Scheduler();
Poznámky
Výchozí plánovač procesu se vytvoří implicitně, když využíváte mnoho funkcí modulu runtime, které vyžadují, aby byl plánovač připojen k kontextu volání. Metody v rámci CurrentScheduler
třídy a funkcí vrstev PPL a agentů obvykle provádějí implicitní přílohu.
Plánovač můžete také explicitně vytvořit buď metodou CurrentScheduler::Create
, nebo metodou Scheduler::Create
.
~Plánovač
Objekt Scheduler
třídy je implicitně zničen, když všechny externí odkazy na ni přestanou existovat.
virtual ~Scheduler();
ScheduleTask
Naplánuje v plánovači lehkou úlohu. Úloha s nízkou hmotností bude umístěna ve skupině plánu určené modulem runtime. Verze, která přebírá parametr _Placement
, způsobí, že úloha bude zkreslená vůči spuštění v zadaném umístění.
virtual void ScheduleTask(
TaskProc _Proc,
_Inout_opt_ void* _Data) = 0;
virtual void ScheduleTask(
TaskProc _Proc,
_Inout_opt_ void* _Data,
location& _Placement) = 0;
Parametry
_Proc
Ukazatel na funkci, která se má provést, aby se provedlo tělo lehké úlohy.
_Data
Ukazatel void na data, která se předají jako parametr textu úkolu.
_Umístění
Odkaz na místo, kde bude úkol s nízkou hmotností zkreslený směrem k provádění na místě.
SetDefaultSchedulerPolicy
Umožňuje použití uživatelem definovaných zásad k vytvoření výchozího plánovače. Tuto metodu lze volat pouze v případě, že v procesu neexistuje žádný výchozí plánovač. Po nastavení výchozí zásady zůstane v platnosti až do dalšího platného volání SetDefaultSchedulerPolicy
metody ResetDefaultSchedulerPolicy .
static void __cdecl SetDefaultSchedulerPolicy(const SchedulerPolicy& _Policy);
Parametry
_Politika
Zásady, které se mají nastavit jako výchozí zásady plánovače.
Poznámky
SetDefaultSchedulerPolicy
Pokud metoda je volána, pokud výchozí plánovač již existuje v rámci procesu, modul runtime vyvolá default_scheduler_exists výjimku.
Viz také
concurrency – obor názvů
Scheduler – třída
PolicyElementKey
Plánovač úloh