Context — Klasa
Reprezentuje abstrakcję kontekstu wykonywania.
Składnia
class Context;
Elementy członkowskie
Konstruktory chronione
Nazwa/nazwisko | opis |
---|---|
~Destruktor kontekstu |
Metody publiczne
Nazwa/nazwisko | opis |
---|---|
Bloku | Blokuje bieżący kontekst. |
CurrentContext | Zwraca wskaźnik do bieżącego kontekstu. |
GetId | Zwraca identyfikator kontekstu, który jest unikatowy w harmonogramie, do którego należy kontekst. |
GetScheduleGroupId | Zwraca identyfikator grupy harmonogramu, nad którą aktualnie pracuje kontekst. |
GetVirtualProcessorId | Zwraca identyfikator procesora wirtualnego, na który jest obecnie wykonywany kontekst. |
Id | Zwraca identyfikator bieżącego kontekstu, który jest unikatowy w harmonogramie, do którego należy bieżący kontekst. |
IsCurrentTaskCollectionCanceling | Zwraca wskazanie, czy kolekcja zadań, która jest obecnie uruchamiana w tekście w bieżącym kontekście, znajduje się w trakcie aktywnego anulowania (lub wkrótce). |
IsSynchronouslyBlocked | Określa, czy kontekst jest synchronicznie blokowany. Kontekst jest uznawany za zablokowany synchronicznie, jeśli jawnie wykonał akcję, która doprowadziła do blokowania. |
Nadsubskrypcja | Wprowadza dodatkowy procesor wirtualny do harmonogramu na czas trwania bloku kodu podczas wywoływanego w kontekście wykonywanym na jednym z procesorów wirtualnych w tym harmonogramie. |
ScheduleGroupId | Zwraca identyfikator grupy harmonogramu, nad którą pracuje bieżący kontekst. |
Odblokować | Odblokuje kontekst i powoduje jego uruchomienie. |
VirtualProcessorId | Zwraca identyfikator procesora wirtualnego, na który jest wykonywany bieżący kontekst. |
Plon | Daje wykonanie, aby można było wykonać inny kontekst. Jeśli żaden inny kontekst nie jest dostępny do uzyskania, harmonogram może uzyskać dostęp do innego wątku systemu operacyjnego. |
Uwagi
Harmonogram środowiska uruchomieniowego współbieżności (zobacz Harmonogram) używa kontekstów wykonywania do wykonywania pracy w kolejce przez aplikację. Wątek Win32 jest przykładem kontekstu wykonywania w systemie operacyjnym Windows.
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.
Harmonogram jest w naturze współpracy i kontekst wykonywania może przynieść procesor wirtualny do innego kontekstu w dowolnym momencie, jeśli chce wprowadzić stan oczekiwania. Gdy jego oczekiwanie jest spełnione, nie może wznowić, dopóki dostępny procesor wirtualny z harmonogramu nie rozpocznie jego wykonywania.
Hierarchia dziedziczenia
Context
Wymagania
Nagłówek: concrt.h
Przestrzeń nazw: współbieżność
Zablokowanie
Blokuje bieżący kontekst.
static void __cdecl Block();
Uwagi
Ta metoda spowoduje utworzenie domyślnego harmonogramu procesu i/lub dołączone do kontekstu wywołującego, jeśli nie ma harmonogramu aktualnie skojarzonego z kontekstem wywołującym.
Jeśli kontekst wywołujący jest uruchomiony na procesorze wirtualnym, procesor wirtualny znajdzie inny kontekst możliwy do uruchomienia lub może potencjalnie utworzyć nowy.
Po wywołaniu Block
metody lub wywołaniu metody należy ją sparować z wywołaniem metody Unblock z innego kontekstu wykonywania, aby można było uruchomić go ponownie. Należy pamiętać, że istnieje krytyczny okres między punktem, w którym kod publikuje kontekst innego wątku, aby móc wywołać Unblock
metodę i punkt, w którym jest wykonywane rzeczywiste wywołanie Block
metody. W tym okresie nie można wywołać żadnej metody, która może zablokować i odblokować z własnych powodów (na przykład uzyskać blokadę). Wywołania metody Block
i Unblock
nie śledzą przyczyny blokowania i odblokowywania. Tylko jeden obiekt powinien mieć własność Block
- Unblock
pary.
Ta metoda może zgłaszać różne wyjątki, w tym scheduler_resource_allocation_error.
~Kontekst
virtual ~Context();
CurrentContext
Zwraca wskaźnik do bieżącego kontekstu.
static Context* __cdecl CurrentContext();
Wartość zwracana
Wskaźnik do bieżącego kontekstu.
Uwagi
Ta metoda spowoduje utworzenie domyślnego harmonogramu procesu i/lub dołączone do kontekstu wywołującego, jeśli nie ma harmonogramu aktualnie skojarzonego z kontekstem wywołującym.
GetId
Zwraca identyfikator kontekstu, który jest unikatowy w harmonogramie, do którego należy kontekst.
virtual unsigned int GetId() const = 0;
Wartość zwracana
Identyfikator kontekstu, który jest unikatowy w harmonogramie, do którego należy kontekst.
GetScheduleGroupId
Zwraca identyfikator grupy harmonogramu, nad którą aktualnie pracuje kontekst.
virtual unsigned int GetScheduleGroupId() const = 0;
Wartość zwracana
Identyfikator grupy harmonogramu, nad nad którymi obecnie pracuje kontekst.
Uwagi
Wartość zwracana z tej metody to natychmiastowe próbkowanie grupy harmonogramu wykonywanej przez kontekst. Jeśli ta metoda jest wywoływana w kontekście innym niż bieżący kontekst, wartość może być nieaktualna, gdy zostanie zwrócona i nie można jej opierać. Zazwyczaj ta metoda jest używana tylko do celów debugowania lub śledzenia.
GetVirtualProcessorId
Zwraca identyfikator procesora wirtualnego, na który jest obecnie wykonywany kontekst.
virtual unsigned int GetVirtualProcessorId() const = 0;
Wartość zwracana
Jeśli kontekst jest obecnie wykonywany na procesorze wirtualnym, identyfikator procesora wirtualnego, na który jest obecnie wykonywany kontekst; w przeciwnym razie wartość -1
.
Uwagi
Wartość zwracana z tej metody to natychmiastowe próbkowanie procesora wirtualnego, na podstawie którego jest wykonywany kontekst. Ta wartość może być nieaktualna w momencie jej zwrócenia i nie można jej polegać. Zazwyczaj ta metoda jest używana tylko do celów debugowania lub śledzenia.
Id
Zwraca identyfikator bieżącego kontekstu, który jest unikatowy w harmonogramie, do którego należy bieżący kontekst.
static unsigned int __cdecl Id();
Wartość zwracana
Jeśli bieżący kontekst jest dołączony do harmonogramu, identyfikator bieżącego kontekstu, który jest unikatowy w harmonogramie, do którego należy bieżący kontekst; w przeciwnym razie wartość -1
.
IsCurrentTaskCollectionCanceling
Zwraca wskazanie, czy kolekcja zadań, która jest obecnie uruchamiana w tekście w bieżącym kontekście, znajduje się w trakcie aktywnego anulowania (lub wkrótce).
static bool __cdecl IsCurrentTaskCollectionCanceling();
Wartość zwracana
Jeśli harmonogram jest dołączony do kontekstu wywołującego, a grupa zadań wykonuje zadanie wbudowane w tym kontekście, wskazanie, czy ta grupa zadań znajduje się w trakcie aktywnego anulowania (lub wkrótce); w przeciwnym razie wartość false
.
IsSynchronouslyBlocked
Określa, czy kontekst jest synchronicznie blokowany. Kontekst jest uznawany za zablokowany synchronicznie, jeśli jawnie wykonał akcję, która doprowadziła do blokowania.
virtual bool IsSynchronouslyBlocked() const = 0;
Wartość zwracana
Określa, czy kontekst jest synchronicznie blokowany.
Uwagi
Kontekst jest uznawany za zablokowany synchronicznie, jeśli jawnie wykonał akcję, która doprowadziła do blokowania. W harmonogramie wątków oznaczałoby to bezpośrednie wywołanie Context::Block
metody lub obiektu synchronizacji, który został utworzony przy użyciu Context::Block
metody .
Wartość zwracana z tej metody jest natychmiastową próbką tego, czy kontekst jest synchronicznie blokowany. Ta wartość może być nieaktualna, gdy jest zwracana i może być używana tylko w bardzo konkretnych okolicznościach.
operator delete
Obiekt Context
jest niszczony wewnętrznie przez środowisko uruchomieniowe. Nie można go jawnie usunąć.
void operator delete(void* _PObject);
Parametry
_PObject
Wskaźnik do obiektu, który ma zostać usunięty.
Nadsubskrypcja
Wprowadza dodatkowy procesor wirtualny do harmonogramu na czas trwania bloku kodu podczas wywoływanego w kontekście wykonywanym na jednym z procesorów wirtualnych w tym harmonogramie.
static void __cdecl Oversubscribe(bool _BeginOversubscription);
Parametry
_BeginOversubscription
Jeśli true
parametr wskazuje, że dodatkowy procesor wirtualny powinien zostać dodany do czasu trwania nadsubskrypcji. Jeśli false
parametr wskazuje, że zasubskrypcja powinna zostać zakończona, a wcześniej dodany procesor wirtualny powinien zostać usunięty.
ScheduleGroupId
Zwraca identyfikator grupy harmonogramu, nad którą pracuje bieżący kontekst.
static unsigned int __cdecl ScheduleGroupId();
Wartość zwracana
Jeśli bieżący kontekst jest dołączony do harmonogramu i pracuje nad grupą harmonogramu, identyfikator grupy harmonogramu, nad którą pracuje bieżący kontekst; w przeciwnym razie wartość -1
.
Odblokuj
Odblokuje kontekst i powoduje jego uruchomienie.
virtual void Unblock() = 0;
Uwagi
Jest to całkowicie legalne, aby wywołanie Unblock
metody przyszedł przed odpowiednim wywołaniem metody Block . Tak długo, jak wywołania Block
metod i Unblock
są prawidłowo sparowane, środowisko uruchomieniowe prawidłowo obsługuje naturalny wyścig obu kolejności. Połączenie Unblock
przychodzące przed Block
wywołaniem po prostu neguje efekt Block
wywołania.
Istnieje kilka wyjątków, które można zgłosić z tej metody. Jeśli kontekst próbuje wywołać metodę Unblock
samodzielnie, zostanie zgłoszony wyjątek context_self_unblock . Jeśli wywołania do elementu i Unblock
nie są prawidłowo sparowane (na przykład dwa wywołania Unblock
są wykonywane dla kontekstu, który jest aktualnie uruchomiony), zostanie zgłoszony wyjątek context_unblock_unbalanced.Block
Należy pamiętać, że istnieje krytyczny okres między punktem, w którym kod publikuje kontekst innego wątku, aby móc wywołać Unblock
metodę i punkt, w którym jest wykonywane rzeczywiste wywołanie Block
metody. W tym okresie nie można wywołać żadnej metody, która może zablokować i odblokować z własnych powodów (na przykład uzyskać blokadę). Wywołania metody Block
i Unblock
nie śledzą przyczyny blokowania i odblokowywania. Tylko jeden obiekt powinien mieć własność pary Block
i Unblock
.
VirtualProcessorId
Zwraca identyfikator procesora wirtualnego, na który jest wykonywany bieżący kontekst.
static unsigned int __cdecl VirtualProcessorId();
Wartość zwracana
Jeśli bieżący kontekst jest dołączony do harmonogramu, identyfikator procesora wirtualnego, na który jest wykonywany bieżący kontekst; w przeciwnym razie wartość -1
.
Uwagi
Wartość zwracana z tej metody to natychmiastowe próbkowanie procesora wirtualnego, na podstawie którego jest wykonywany bieżący kontekst. Ta wartość może być nieaktualna w momencie jej zwrócenia i nie można jej polegać. Zazwyczaj ta metoda jest używana tylko do celów debugowania lub śledzenia.
Plon
Daje wykonanie, aby można było wykonać inny kontekst. Jeśli żaden inny kontekst nie jest dostępny do uzyskania, harmonogram może uzyskać dostęp do innego wątku systemu operacyjnego.
static void __cdecl Yield();
Uwagi
Ta metoda spowoduje utworzenie domyślnego harmonogramu procesu i/lub dołączone do kontekstu wywołującego, jeśli nie ma harmonogramu aktualnie skojarzonego z kontekstem wywołującym.
YieldExecution
Daje wykonanie, aby można było wykonać inny kontekst. Jeśli żaden inny kontekst nie jest dostępny do uzyskania, harmonogram może uzyskać dostęp do innego wątku systemu operacyjnego.
static void __cdecl YieldExecution();
Uwagi
Ta metoda spowoduje utworzenie domyślnego harmonogramu procesu i/lub dołączone do kontekstu wywołującego, jeśli nie ma harmonogramu aktualnie skojarzonego z kontekstem wywołującym.
Ta funkcja jest nowa w programie Visual Studio 2015 i jest identyczna z funkcją Yield , ale nie powoduje konfliktu z makrem Yield w systemie Windows.h.
Zobacz też
Przestrzeń nazw współbieżności
Scheduler, klasa
Harmonogram zadań