Udostępnij za pośrednictwem


IThreadProxy — Struktura

Abstrakcja wątku wykonywania. W zależności SchedulerType od klucza zasad tworzonego harmonogramu usługa Resource Manager udzieli ci serwera proxy wątku, który jest wspierany przez zwykły wątek Win32 lub wątek z możliwością schedulable (UMS) w trybie użytkownika. Wątki pakietu UMS są obsługiwane w 64-bitowych systemach operacyjnych w wersji Windows 7 lub nowszej.

Składnia

struct IThreadProxy;

Elementy członkowskie

Metody publiczne

Nazwa/nazwisko opis
IThreadProxy::GetId Zwraca unikatowy identyfikator serwera proxy wątku.
IThreadProxy::SwitchOut Usuwa skojarzenie kontekstu z bazowego katalogu głównego procesora wirtualnego.
IThreadProxy::SwitchTo Wykonuje przełącznik kontekstu współpracy z aktualnie wykonywanym kontekstem do innego.
IThreadProxy::YieldToSystem Powoduje, że wątek wywołujący daje wykonywanie do innego wątku, który jest gotowy do uruchomienia na bieżącym procesorze. System operacyjny wybiera następny wątek do wykonania.

Uwagi

Serwery proxy wątków są powiązane z kontekstami wykonywania reprezentowanymi przez interfejs IExecutionContext jako środek wysyłania pracy.

Hierarchia dziedziczenia

IThreadProxy

Wymagania

Nagłówek: concrtrm.h

Przestrzeń nazw: współbieżność

IThreadProxy::GetId — Metoda

Zwraca unikatowy identyfikator serwera proxy wątku.

virtual unsigned int GetId() const = 0;

Wartość zwracana

Unikatowy identyfikator liczb całkowitych.

IThreadProxy::SwitchOut — Metoda

Usuwa skojarzenie kontekstu z bazowego katalogu głównego procesora wirtualnego.

virtual void SwitchOut(SwitchingProxyState switchState = Blocking) = 0;

Parametry

switchState
Wskazuje stan serwera proxy wątku, który wykonuje przełącznik. Parametr jest typu SwitchingProxyState.

Uwagi

Użyj SwitchOut polecenia , jeśli musisz usunąć skojarzenie kontekstu z katalogu głównego procesora wirtualnego, na którym jest wykonywany, z jakiegokolwiek powodu. W zależności od wartości przekazanej do parametru switchState, i tego, czy jest on wykonywany w katalogu głównym procesora wirtualnego, wywołanie zwróci natychmiast lub zablokuje serwer proxy wątku skojarzony z kontekstem. Jest to błąd wywołania SwitchOut z parametrem ustawionym na Idlewartość . Spowoduje to wystąpienie wyjątku invalid_argument .

SwitchOut jest przydatne, gdy chcesz zmniejszyć liczbę katalogów głównych procesora wirtualnego, który ma harmonogram, ponieważ usługa Resource Manager poleciła ci to zrobić, lub dlatego, że zażądano tymczasowego nadsubskrybowanego katalogu głównego procesora wirtualnego i zostało to zrobione. W takim przypadku należy wywołać metodę IVirtualProcessorRoot::Remove w katalogu głównym procesora wirtualnego przed wywołaniem SwitchOut metody z parametrem switchState ustawionym na Blockingwartość . Spowoduje to zablokowanie serwera proxy wątku i wznowi wykonywanie, gdy do jego wykonania będzie dostępny inny katalog główny procesora wirtualnego w harmonogramie. Serwer proxy wątku blokującego można wznowić, wywołując funkcję SwitchTo , aby przełączyć się do kontekstu wykonywania tego serwera proxy wątku. Możesz również wznowić serwer proxy wątku przy użyciu skojarzonego kontekstu w celu aktywowania katalogu głównego procesora wirtualnego. Aby uzyskać więcej informacji o tym, jak to zrobić, zobacz IVirtualProcessorRoot::Activate.

SwitchOut Może być również używany w przypadku ponownego zainicjowania procesora wirtualnego, aby można było go aktywować w przyszłości, blokując serwer proxy wątku lub tymczasowo odłączając go od głównego procesora wirtualnego, na którym działa, oraz harmonogram, dla którego jest wysyłany. Użyj parametru SwitchOut z ustawionym parametrem switchState , aby Blocking zablokować serwer proxy wątku. Można go później wznowić przy użyciu polecenia SwitchTo lub IVirtualProcessorRoot::Activate , jak wspomniano powyżej. Użyj SwitchOut parametru z ustawionym parametrem , aby Nesting tymczasowo odłączyć ten serwer proxy wątku od katalogu głównego procesora wirtualnego, na którym jest uruchomiony, a harmonogram jest skojarzony z procesorem wirtualnym. Wywołanie SwitchOut za pomocą parametru ustawionego na Nesting wartość switchState , gdy jest wykonywane w katalogu głównym procesora wirtualnego, spowoduje ponowne zainicjowanie katalogu głównego i bieżący serwer proxy wątku, aby kontynuować wykonywanie bez potrzeby jednego. Serwer proxy wątku jest uznawany za pozostawiony harmonogram do momentu wywołania metody IThreadProxy::SwitchOut z Blocking późniejszą godziną. Drugie wywołanie polecenia SwitchOut z parametrem ustawionym Blocking na ma na celu zwrócenie kontekstu do stanu zablokowanego, aby można było wznowić go przez SwitchTo harmonogram lub IVirtualProcessorRoot::Activate w harmonogramie, z którego jest odłączony. Ponieważ nie był wykonywany w katalogu głównym procesora wirtualnego, nie odbywa się ponowne inicjowanie.

Ponownie zainicjowany katalog główny procesora wirtualnego nie różni się od zupełnie nowego katalogu głównego procesora wirtualnego, który został przyznany przez usługę Resource Manager. Można go użyć do wykonania, aktywując go z kontekstem wykonywania przy użyciu polecenia IVirtualProcessorRoot::Activate.

SwitchOut Musi być wywoływany w interfejsie IThreadProxy reprezentującym aktualnie wykonywany wątek lub wyniki są niezdefiniowane.

W bibliotekach i nagłówkach dostarczanych z programem Visual Studio 2010 ta metoda nie wykonała parametru i nie zainicjowała katalogu głównego procesora wirtualnego. Aby zachować stare zachowanie, zostanie podana domyślna wartość parametru Blocking .

IThreadProxy::SwitchTo — Metoda

Wykonuje przełącznik kontekstu współpracy z aktualnie wykonywanym kontekstem do innego.

virtual void SwitchTo(
    _Inout_ IExecutionContext* pContext,
    SwitchingProxyState switchState) = 0;

Parametry

pContext
Kontekst wykonywania, na który należy się przełączać kooperatywne.

switchState
Wskazuje stan serwera proxy wątku, który wykonuje przełącznik. Parametr jest typu SwitchingProxyState.

Uwagi

Użyj tej metody, aby przełączyć się z jednego kontekstu wykonywania na inny z metody IExecutionContext::D ispatch pierwszego kontekstu wykonywania. Metoda kojarzy kontekst pContext wykonywania z serwerem proxy wątku, jeśli nie jest jeszcze skojarzony z nim. Własność bieżącego serwera proxy wątku jest określana przez wartość określaną dla argumentu switchState .

Użyj wartości Idle , jeśli chcesz zwrócić aktualnie wykonywany serwer proxy wątku do usługi Resource Manager. Wywołanie SwitchTo polecenia z ustawionym Idle parametrem switchState spowoduje uruchomienie kontekstu pContext wykonywania w bazowym zasobie wykonywania. Własność tego serwera proxy wątku jest przenoszona do usługi Resource Manager i oczekuje się, że nastąpi powrót z metody kontekstu Dispatch wykonywania wkrótce po SwitchTo powrocie, aby ukończyć transfer. Kontekst wykonywania, który serwer proxy wątku wysyłał, jest odłączony od serwera proxy wątku, a harmonogram jest wolny do ponownego użycia lub zniszczenia go w miarę dopasowania.

Użyj wartości Blocking , jeśli ten serwer proxy wątku ma wprowadzić stan zablokowany. Wywołanie SwitchTo z ustawionym parametrem switchState spowoduje, że Blocking kontekst pContext wykonywania rozpocznie wykonywanie i zablokuje bieżący serwer proxy wątku do momentu wznowienia. Harmonogram zachowuje własność serwera proxy wątku, gdy serwer proxy wątku Blocking jest w stanie. Serwer proxy wątku blokującego można wznowić, wywołując funkcję SwitchTo , aby przełączyć się do kontekstu wykonywania tego serwera proxy wątku. Możesz również wznowić serwer proxy wątku przy użyciu skojarzonego kontekstu w celu aktywowania katalogu głównego procesora wirtualnego. Aby uzyskać więcej informacji o tym, jak to zrobić, zobacz IVirtualProcessorRoot::Activate.

Użyj wartości Nesting , jeśli chcesz tymczasowo odłączyć ten serwer proxy wątku od katalogu głównego procesora wirtualnego, na którym jest uruchomiony, oraz harmonogram, dla którego jest wysyłany. Wywołanie SwitchTo polecenia z ustawionym Nesting parametrem switchState spowoduje, że kontekst pContext wykonywania rozpocznie wykonywanie, a bieżący serwer proxy wątku również kontynuuje wykonywanie bez konieczności używania katalogu głównego procesora wirtualnego. Serwer proxy wątku jest uznawany za pozostawiony harmonogram, dopóki nie wywoła metody IThreadProxy::SwitchOut w późniejszym momencie. Metoda IThreadProxy::SwitchOut może zablokować serwer proxy wątku, dopóki serwer główny procesora wirtualnego nie będzie dostępny do ponownego zaplanowanie.

SwitchTo Musi być wywoływany w interfejsie IThreadProxy reprezentującym aktualnie wykonywany wątek lub wyniki są niezdefiniowane. Funkcja zgłasza wartość invalid_argument , jeśli parametr pContext jest ustawiony na NULLwartość .

IThreadProxy::YieldToSystem — Metoda

Powoduje, że wątek wywołujący daje wykonywanie do innego wątku, który jest gotowy do uruchomienia na bieżącym procesorze. System operacyjny wybiera następny wątek do wykonania.

virtual void YieldToSystem() = 0;

Uwagi

Po wywołaniu przez serwer proxy wątku wspierany przez zwykły wątek YieldToSystem systemu Windows zachowuje się dokładnie tak jak funkcja SwitchToThreadsystemu Windows . Jednak w przypadku wywołania z wątków SwitchToThread z możliwością schedulable (UMS) w trybie użytkownika funkcja deleguje zadanie wybierania następnego wątku do uruchomienia do harmonogramu trybu użytkownika, a nie systemu operacyjnego. Aby osiągnąć pożądany efekt przełączenia do innego gotowego wątku w systemie, użyj polecenia YieldToSystem.

YieldToSystem Musi być wywoływany w interfejsie IThreadProxy reprezentującym aktualnie wykonywany wątek lub wyniki są niezdefiniowane.

Zobacz też

Przestrzeń nazw współbieżności
IExecutionContext, struktura
IScheduler, struktura
IVirtualProcessorRoot, struktura