Context — Klasa

Reprezentuje abstrakcję kontekstu wykonywania.

Składnia

class Context;

Członkowie

Konstruktory chronione

Nazwa/nazwisko opis
~Destruktor kontekstu

Metody publiczne

Nazwa/nazwisko opis
Blok 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.
Wydajność 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ść

Zablokuj

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.

~Kontekście

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 trueparametr wskazuje, że dodatkowy procesor wirtualny powinien zostać dodany do czasu trwania nadsubskrypcji. Jeśli falseparametr 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.

Wydajność

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ń