Udostępnij za pośrednictwem


Klasa harmonogramu

Reprezentuje abstrakcję dla harmonogramu środowiska uruchomieniowego współbieżności.

Składnia

class Scheduler;

Członkowie

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.
Wersja 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 SetDefaultSchedulerPolicynastę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

_Zasad
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.

Wydanie

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.

Scheduler

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.

_Danych
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 SetDefaultSchedulerPolicynastępnego prawidłowego wywołania metody ResetDefaultSchedulerPolicy .

static void __cdecl SetDefaultSchedulerPolicy(const SchedulerPolicy& _Policy);

Parametry

_Zasad
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ń