Sdílet prostřednictvím


Třída plánovače

Představuje abstrakci plánovače concurrency Runtime.

Syntaxe

class Scheduler;

Členové

Chráněné konstruktory

Jméno 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

Jméno 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í SetDefaultSchedulerPolicymetody 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

Obor názvů: 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

_Zásad
Zásady plánovače, které popisují chování nově vytvořeného plánovače.

Vrácená 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í.

Vrácená 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;

Vrácená 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;

Vrácená 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;

Vrácená 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.

Vrácená 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 ;

Vrácená 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.

Release

Sníží počet odkazů plánovače.

virtual unsigned int Release() = 0;

Vrácená 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.

_Dat
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í SetDefaultSchedulerPolicymetody ResetDefaultSchedulerPolicy .

static void __cdecl SetDefaultSchedulerPolicy(const SchedulerPolicy& _Policy);

Parametry

_Zásad
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