IThreadProxy::SwitchOut — Metoda
Usuwa kontekst z podstawowego procesora wirtualnego katalogu głównego.
virtual void SwitchOut(
SwitchingProxyState switchState = Blocking
) =0;
Parametry
- switchState
Wskazuje stan wątku proxy realizującego przełącznik.Parametr jest typu SwitchingProxyState.
Uwagi
UżyjSwitchOut jeśli trzeba usunąć skojarzenie kontekstu z procesora wirtualnego katalogu głównego, który on wykonuje z jakiegokolwiek powodu.Zależnie od wartości przekazanej do parametru switchState, i w zależności od tego, czy jest on uruchamiany, czy nie, w głównym procesorze wirtualnym, wywołanie zostanie niezwłocznie zawrócone lub zablokuje proxy wątku skojarzonego z kontekstem.Błędem jest wywołanie SwitchOut z parametrem ustawionym na Idle.Ten sposób spowoduje wyjątek invalid_argument.
SwitchOut jest przydatne, gdy chcesz ograniczyć liczbę korzeni procesora wirtualnego, która ma swój harmonogram, ponieważ Menedżer zasobów nakazał ci tak zrobić, lub ponieważ zażądałeś tymczasowego procesora wirtualnego katalogu głównego, i skończyłeś już.W tym przypadku należy wywołać metodę IVirtualProcessorRoot::Remove Method z wirtualnego katalogu głównego procesora, przed wykonaniem połączenia do SwitchOut z parametrem switchState ustawionym na Blocking.Będzie to blok proxy wątku i wykonanie zostanie wznowione po udostępnieniu do wykonania go innemu głównemu procesorowi wirtualnemu w ramach harmonogramu zadań.Blokowanie serwera proxy wątku może być wznowione przez wywołanie funkcji SwitchTo aby przełączyć się do kontekstu wykonania tego wątku serwera proxy.Można również wznowić proxy wątku za pomocą jego skojarzonego kontekstu, aby uaktywnić procesor wirtualnego katalogu głównego.Aby uzyskać więcej informacji dotyczących sposobu wykonania tego zadania, zobacz IVirtualProcessorRoot::Activate.
SwitchOut może być również używany, gdy chcesz ponownie zainicjować procesor wirtualny tak, aby mógł być aktywny w przyszłości podczas albo blokowania serwera proxy wątku lub tymczasowego odłączenia go od głównego procesora wirtualnego, na którym jest uruchomiony, a harmonogram wywołujący pracę dla niego.Użyj SwitchOut z parametrem switchState ustawiony na Blocking jeśli chcesz blokować wątek serwera proxy.Później można go wznowić, przy użyciu SwitchTo lub IVirtualProcessorRoot::Activate jak wspomniano powyżej.Użyj SwitchOut z parametrem zestawu do Nesting kiedy chcesz tymczasowo odłączyć ten serwer proxy wątku z procesora wirtualnego katalogu głównego, na którym jest uruchomiony a harmonogram procesora wirtualnego jest skojarzony z.Wywołanie SwitchOut z parametrem switchState ustawionym na Nesting podczas wykonywania w głównym procesorze wirtualnym powoduje, że główny procesor trzeba ponownie zainicjować oraz bieżący wątek serwera proxy, aby kontynuować bez przeszkódUznaje się, że serwer proxy wątku opuścił harmonogram, dopóki nie wywoła IThreadProxy::SwitchOut metody z Blocking w dowolnym momencie w czasie.Drugie wywołanie SwitchOut z parametrem zestaw do Blocking jest przeznaczone do zwracania kontekstu zablokowanego stanu tak, że może być wznowione przez którykolwiek SwitchTo lub IVirtualProcessorRoot::Activate w harmonogramie od, którego jest odłączony.Ponieważ nie wykonuje się tego w głównym procesorze wirtualnym, nie odbywa się ponowne inicjowanie.
Ponownie zainicjalizowany procesor wirtualny katalogu głównego nie różni się od całkiem nowego procesora wirtualnego katalogu głównego, który został przyznany do harmonogramu przez Menedżera zasobów.Można użyć go do wykonania aktywując go z kontekstu wykonania za pomocą IVirtualProcessorRoot::Activate.
SwitchOut musi być wywołany w IThreadProxy interfejsie, który reprezentuje aktualnie wykonywany wątek lub wyniki są niezdefiniowane.
W bibliotekach i nagłówkach dostarczonych wraz z programem Visual Studio 2010 metoda ta nie miała parametru i nie inicjowała ponownie procesora wirtualnego katalogu głównego.Aby zachować stare zachowanie domyślnej wartości parametru Blocking jest dostarczany.
Wymagania
Nagłówek: concrtrm.h
Przestrzeń nazw: concurrency