Klasa harmonogramu
Reprezentuje abstrakcję dla harmonogramu środowiska uruchomieniowego współbieżności.
Składnia
class Scheduler;
Elementy członkowskie
Konstruktory chronione
Nazwa/nazwisko | opis |
---|---|
Scheduler | Obiekt Scheduler klasy może być tworzony tylko przy użyciu metod fabrycznych lub niejawnie. |
~Destruktor harmonogramu | Obiekt Scheduler klasy jest niejawnie niszczony, gdy wszystkie odwołania zewnętrzne do niej przestaną istnieć. |
Metody publiczne
Nazwa/nazwisko | opis |
---|---|
Attach | Dołącza harmonogram do kontekstu wywołującego. Po powrocie tej metody kontekst wywołujący jest zarządzany przez harmonogram, a harmonogram staje się bieżącym harmonogramem. |
Utwórz | Tworzy nowy harmonogram, którego zachowanie zostało opisane przez _Policy parametr , umieszcza początkowe odwołanie do harmonogramu i zwraca do niego wskaźnik. |
CreateScheduleGroup | Przeciążone. Tworzy nową grupę harmonogramu w harmonogramie. Wersja, która przyjmuje parametr _Placement powoduje, że zadania w nowo utworzonej grupie harmonogramu są stronniczo wykonywane w lokalizacji określonej przez ten parametr. |
GetNumberOfVirtualProcessors | Zwraca bieżącą liczbę procesorów wirtualnych dla harmonogramu. |
GetPolicy | Zwraca kopię zasad, za pomocą której został utworzony harmonogram. |
Id | Zwraca unikatowy identyfikator harmonogramu. |
IsAvailableLocation | Określa, czy dana lokalizacja jest dostępna w harmonogramie. |
Odwołanie | Zwiększa liczbę odwołań do harmonogramu. |
RegisterShutdownEvent | Powoduje, że dojście zdarzeń systemu Windows przekazane w parametrze _Event ma być zasygnalizowane, gdy harmonogram zostanie zamknięty i sam się zniszczy. W momencie zasygnaliowania zdarzenia wszystkie prace zaplanowane do harmonogramu są ukończone. Za pomocą tej metody można zarejestrować wiele zdarzeń zamknięcia. |
Wydanie | Dekrementuje liczbę odwołań do harmonogramu. |
ResetDefaultSchedulerPolicy | Resetuje domyślne zasady harmonogramu do domyślnego środowiska uruchomieniowego. Przy następnym utworzeniu harmonogramu domyślnego użyje domyślnych ustawień zasad środowiska uruchomieniowego. |
ScheduleTask | Przeciążone. Planuje lekkie zadanie w harmonogramie. Zadanie o lekkiej wadze zostanie umieszczone w grupie harmonogramu określonej przez środowisko uruchomieniowe. Wersja, która przyjmuje parametr _Placement powoduje, że zadanie jest odchylone w kierunku wykonywania w określonej lokalizacji. |
SetDefaultSchedulerPolicy | Umożliwia używanie zasad zdefiniowanych przez użytkownika do tworzenia domyślnego harmonogramu. Tę metodę można wywołać tylko wtedy, gdy w procesie nie istnieje domyślny harmonogram. Po ustawieniu zasad domyślnych pozostaje ona w mocy do SetDefaultSchedulerPolicy następnego prawidłowego wywołania metody ResetDefaultSchedulerPolicy . |
Uwagi
Harmonogram środowiska uruchomieniowego współbieżności używa kontekstów wykonywania, które są mapowane na konteksty wykonywania systemu operacyjnego, takie jak wątek, w celu wykonania pracy w kolejce przez aplikację. W dowolnym momencie poziom współbieżności harmonogramu jest równy liczbie procesorów wirtualnych przyznanych przez usługę Resource Manager. Procesor wirtualny jest abstrakcją zasobu przetwarzania i mapuje na wątek sprzętowy w podstawowym systemie. W danym momencie na procesorze wirtualnym może być wykonywany tylko jeden kontekst harmonogramu.
Środowisko uruchomieniowe współbieżności utworzy domyślny harmonogram dla każdego procesu w celu wykonania równoległej pracy. Ponadto możesz utworzyć własne wystąpienia harmonogramu i manipulować nimi przy użyciu tej klasy.
Hierarchia dziedziczenia
Scheduler
Wymagania
Nagłówek: concrt.h
Przestrzeń nazw: współbieżność
Dołącz
Dołącza harmonogram do kontekstu wywołującego. Po powrocie tej metody kontekst wywołujący jest zarządzany przez harmonogram, a harmonogram staje się bieżącym harmonogramem.
virtual void Attach() = 0;
Uwagi
Dołączanie harmonogramu niejawnie umieszcza odwołanie w harmonogramie.
W pewnym momencie w przyszłości należy wywołać metodę CurrentScheduler::D etach , aby umożliwić zamykanie harmonogramu.
Jeśli ta metoda jest wywoływana z kontekstu, który jest już dołączony do innego harmonogramu, istniejący harmonogram zostanie zapamiętany jako poprzedni harmonogram, a nowo utworzony harmonogram staje się bieżącym harmonogramem. Po wywołaniu CurrentScheduler::Detach
metody w późniejszym momencie poprzedni harmonogram zostanie przywrócony jako bieżący harmonogram.
Ta metoda zgłosi wyjątek improper_scheduler_attach , jeśli ten harmonogram jest bieżącym harmonogramem kontekstu wywołującego.
Utworzenie
Tworzy nowy harmonogram, którego zachowanie zostało opisane przez _Policy
parametr , umieszcza początkowe odwołanie do harmonogramu i zwraca do niego wskaźnik.
static Scheduler* __cdecl Create(const SchedulerPolicy& _Policy);
Parametry
_Polityka
Zasady harmonogramu opisujące zachowanie nowo utworzonego harmonogramu.
Wartość zwracana
Wskaźnik do nowo utworzonego harmonogramu. Ten Scheduler
obiekt zawiera początkową liczbę odwołań.
Uwagi
Po utworzeniu Create
harmonogramu za pomocą metody należy wywołać Release
metodę w pewnym momencie w przyszłości, aby usunąć początkową liczbę odwołań i zezwolić harmonogramowi na zamknięcie.
Harmonogram utworzony za pomocą tej metody nie jest dołączony do kontekstu wywołującego. Można go dołączyć do kontekstu przy użyciu metody Attach .
Ta metoda może zgłaszać różne wyjątki, w tym scheduler_resource_allocation_error i invalid_scheduler_policy_value.
CreateScheduleGroup
Tworzy nową grupę harmonogramu w harmonogramie. Wersja, która przyjmuje parametr _Placement
powoduje, że zadania w nowo utworzonej grupie harmonogramu są stronniczo wykonywane w lokalizacji określonej przez ten parametr.
virtual ScheduleGroup* CreateScheduleGroup() = 0;
virtual ScheduleGroup* CreateScheduleGroup(location& _Placement) = 0;
Parametry
_Umieszczenie
Odwołanie do lokalizacji, w której zadania w grupie harmonogramu będą stronniczo wykonywane.
Wartość zwracana
Wskaźnik do nowo utworzonej grupy harmonogramu. Ten ScheduleGroup
obiekt zawiera początkową liczbę odwołań.
Uwagi
Po zakończeniu planowania pracy należy wywołać metodę Release w grupie harmonogramu. Harmonogram zniszczy grupę harmonogramu po zakończeniu wszystkich zadań w kolejce.
Należy pamiętać, że jeśli ten harmonogram został jawnie utworzony, należy zwolnić wszystkie odwołania do zaplanowanych grup przed wydaniem odwołań w harmonogramie.
GetNumberOfVirtualProcessors
Zwraca bieżącą liczbę procesorów wirtualnych dla harmonogramu.
virtual unsigned int GetNumberOfVirtualProcessors() const = 0;
Wartość zwracana
Bieżąca liczba procesorów wirtualnych dla harmonogramu.
GetPolicy
Zwraca kopię zasad, za pomocą której został utworzony harmonogram.
virtual SchedulerPolicy GetPolicy() const = 0;
Wartość zwracana
Kopia zasad, za pomocą której utworzono harmonogram.
Id
Zwraca unikatowy identyfikator harmonogramu.
virtual unsigned int Id() const = 0;
Wartość zwracana
Unikatowy identyfikator harmonogramu.
IsAvailableLocation
Określa, czy dana lokalizacja jest dostępna w harmonogramie.
virtual bool IsAvailableLocation(const location& _Placement) const = 0;
Parametry
_Umieszczenie
Odwołanie do lokalizacji do wykonywania zapytań dotyczących harmonogramu.
Wartość zwracana
Wskazanie, czy lokalizacja określona przez _Placement
argument jest dostępna w harmonogramie.
Uwagi
Należy pamiętać, że wartość zwracana to natychmiastowe próbkowanie tego, czy dana lokalizacja jest dostępna. W obecności wielu harmonogramów dynamiczne zarządzanie zasobami może dodawać lub odbierać zasoby od harmonogramów w dowolnym momencie. W takim przypadku dana lokalizacja może zmienić dostępność.
Odwołanie
Zwiększa liczbę odwołań do harmonogramu.
virtual unsigned int Reference() = 0 ;
Wartość zwracana
Nowo zwiększana liczba odwołań.
Uwagi
Jest to zwykle używane do zarządzania okresem istnienia harmonogramu na potrzeby kompozycji. Gdy liczba odwołań harmonogramu spadnie do zera, harmonogram zostanie zamknięty i zdrukturyzuje się po zakończeniu wszystkich prac nad harmonogramem.
Metoda zgłosi wyjątek improper_scheduler_reference , jeśli liczba odwołań przed wywołaniem Reference
metody wynosiła zero, a wywołanie jest wykonywane z kontekstu, który nie jest własnością harmonogramu.
RegisterShutdownEvent
Powoduje, że dojście zdarzeń systemu Windows przekazane w parametrze _Event
ma być zasygnalizowane, gdy harmonogram zostanie zamknięty i sam się zniszczy. W momencie zasygnaliowania zdarzenia wszystkie prace zaplanowane do harmonogramu są ukończone. Za pomocą tej metody można zarejestrować wiele zdarzeń zamknięcia.
virtual void RegisterShutdownEvent(HANDLE _Event) = 0;
Parametry
_Zdarzenie
Dojście do obiektu zdarzenia systemu Windows, który będzie sygnalizowany przez środowisko uruchomieniowe, gdy harmonogram zostanie zamknięty i zniszczony.
Zwolnij
Dekrementuje liczbę odwołań do harmonogramu.
virtual unsigned int Release() = 0;
Wartość zwracana
Nowo zdekrementowana liczba odwołań.
Uwagi
Jest to zwykle używane do zarządzania okresem istnienia harmonogramu na potrzeby kompozycji. Gdy liczba odwołań harmonogramu spadnie do zera, harmonogram zostanie zamknięty i zdrukturyzuje się po zakończeniu wszystkich prac nad harmonogramem.
ResetDefaultSchedulerPolicy
Resetuje domyślne zasady harmonogramu do domyślnego środowiska uruchomieniowego. Przy następnym utworzeniu harmonogramu domyślnego użyje domyślnych ustawień zasad środowiska uruchomieniowego.
static void __cdecl ResetDefaultSchedulerPolicy();
Uwagi
Tę metodę można wywołać, gdy w procesie istnieje domyślny harmonogram. Nie wpłynie to na zasady istniejącego domyślnego harmonogramu. Jeśli jednak domyślny harmonogram miał zostać zamknięty, a w późniejszym momencie zostanie utworzona nowa wartość domyślna, nowy harmonogram będzie używał domyślnych ustawień zasad środowiska uruchomieniowego.
Planista
Obiekt Scheduler
klasy może być tworzony tylko przy użyciu metod fabrycznych lub niejawnie.
Scheduler();
Uwagi
Domyślny harmonogram procesu jest tworzony niejawnie w przypadku korzystania z wielu funkcji środowiska uruchomieniowego, które wymagają dołączenia harmonogramu do kontekstu wywołującego. Metody w CurrentScheduler
klasie i funkcjach warstw PPL i agentów zwykle wykonują niejawne załączniki.
Harmonogram można również utworzyć jawnie za pomocą CurrentScheduler::Create
metody lub Scheduler::Create
metody .
~Harmonogram
Obiekt Scheduler
klasy jest niejawnie niszczony, gdy wszystkie odwołania zewnętrzne do niej przestaną istnieć.
virtual ~Scheduler();
ScheduleTask
Planuje lekkie zadanie w harmonogramie. Zadanie o lekkiej wadze zostanie umieszczone w grupie harmonogramu określonej przez środowisko uruchomieniowe. Wersja, która przyjmuje parametr _Placement
powoduje, że zadanie jest odchylone w kierunku wykonywania w określonej lokalizacji.
virtual void ScheduleTask(
TaskProc _Proc,
_Inout_opt_ void* _Data) = 0;
virtual void ScheduleTask(
TaskProc _Proc,
_Inout_opt_ void* _Data,
location& _Placement) = 0;
Parametry
_Proc
Wskaźnik do funkcji do wykonania w celu wykonania treści zadania lekkiego.
_Dane
Wskaźnik void do danych, które zostaną przekazane jako parametr do treści zadania.
_Umieszczenie
Odwołanie do lokalizacji, w której zadanie o lekkiej wadze zostanie odchylenie w kierunku wykonywania na.
SetDefaultSchedulerPolicy
Umożliwia używanie zasad zdefiniowanych przez użytkownika do tworzenia domyślnego harmonogramu. Tę metodę można wywołać tylko wtedy, gdy w procesie nie istnieje domyślny harmonogram. Po ustawieniu zasad domyślnych pozostaje ona w mocy do SetDefaultSchedulerPolicy
następnego prawidłowego wywołania metody ResetDefaultSchedulerPolicy .
static void __cdecl SetDefaultSchedulerPolicy(const SchedulerPolicy& _Policy);
Parametry
_Polityka
Zasady, które mają być ustawione jako domyślne zasady harmonogramu.
Uwagi
SetDefaultSchedulerPolicy
Jeśli metoda jest wywoływana, gdy domyślny harmonogram już istnieje w procesie, środowisko uruchomieniowe zgłosi wyjątek default_scheduler_exists.
Zobacz też
Przestrzeń nazw współbieżności
Scheduler, klasa
PolicyElementKey
Harmonogram zadań