IThreadProxy – struktura
Abstrakce pro vlákno provádění. V závislosti na SchedulerType
klíči zásad plánovače, který vytvoříte, vám Resource Manager udělí proxy vlákno, které je podporováno běžným vláknem Win32 nebo vláknem Schedulable (UMS) v uživatelském režimu. Vlákna UMS jsou podporována v 64bitových operačních systémech s verzí Windows 7 a vyšší.
Syntaxe
struct IThreadProxy;
Členové
Veřejné metody
Název | Popis |
---|---|
IThreadProxy::GetId | Vrátí jedinečný identifikátor proxy vlákna. |
IThreadProxy::SwitchOut | Oddružuje kontext od základního kořenového virtuálního procesoru. |
IThreadProxy::SwitchTo | Provede kooperativní kontext přepnutí z aktuálně spuštěného kontextu na jiný kontext. |
IThreadProxy::YieldToSystem | Způsobí, že volající vlákno způsobí spuštění do jiného vlákna, které je připraveno ke spuštění v aktuálním procesoru. Operační systém vybere další vlákno, které se má spustit. |
Poznámky
Proxy vláken jsou svázané s kontexty spouštění reprezentované rozhraním IExecutionContext
jako způsob odesílání práce.
Hierarchie dědičnosti
IThreadProxy
Požadavky
Hlavička: concrtrm.h
Namespace: souběžnost
IThreadProxy::GetId – metoda
Vrátí jedinečný identifikátor proxy vlákna.
virtual unsigned int GetId() const = 0;
Návratová hodnota
Jedinečný celočíselnou identifikátor.
IThreadProxy::SwitchOut – metoda
Oddružuje kontext od základního kořenového virtuálního procesoru.
virtual void SwitchOut(SwitchingProxyState switchState = Blocking) = 0;
Parametry
switchState
Označuje stav proxy vlákna, který spouští přepínač. Parametr je typu SwitchingProxyState
.
Poznámky
Použijte SwitchOut
, pokud potřebujete zrušit přidružení kontextu od kořenového adresáře virtuálního procesoru, na který se provádí z jakéhokoli důvodu. V závislosti na hodnotě, kterou předáte parametru switchState
, a zda se spouští v kořenovém adresáři virtuálního procesoru, volání vrátí buď okamžitě, nebo zablokuje proxy vlákna přidružené k kontextu. Jedná se o chybu volání SwitchOut
s parametrem nastaveným na Idle
. Tím dojde k výjimce invalid_argument .
SwitchOut
je užitečné, když chcete snížit počet kořenových virtuálních procesorů, které plánovač má, buď proto, že vás Resource Manager požádal, abyste to udělali, nebo proto, že jste požádali o dočasný kořen virtuálního procesoru, který je předpsaný, a jsou s ním hotovi. V tomto případě byste měli vyvolat metodu IVirtualProcessorRoot::Remove v kořenovém adresáři virtuálního procesoru před voláním SwitchOut
s parametrem switchState
nastaveným na Blocking
. Tím se zablokuje proxy vlákno a bude pokračovat v provádění, pokud je k dispozici jiný kořenový adresář virtuálního procesoru v plánovači. Blokující proxy vlákno lze obnovit voláním funkce SwitchTo
, která přepne do kontextu spuštění tohoto proxy vlákna. Proxy vláken můžete obnovit také pomocí jeho přidruženého kontextu k aktivaci kořenového adresáře virtuálního procesoru. Další informace o tom, jak to provést, naleznete v tématu IVirtualProcessorRoot::Activate.
SwitchOut
může být také použita, pokud chcete virtuální procesor znovu inicializovat, aby se mohl aktivovat v budoucnu, a to buď blokování proxy vlákna, nebo dočasné odpojení od kořenového adresáře virtuálního procesoru, na kterém běží, a plánovač, pro který odesílá práci. Používá SwitchOut
se se sadou parametrů switchState
, pokud Blocking
chcete blokovat proxy vlákna. Později ho můžete obnovit buď pomocí SwitchTo
výše uvedeného postupu, nebo IVirtualProcessorRoot::Activate
jak je uvedeno výše. Použijte SwitchOut
s parametrem nastaveným na to, kdy Nesting
chcete dočasně odpojit tento proxy vlákno od kořenového adresáře virtuálního procesoru, na kterém běží, a plánovač je přidružený k virtuálnímu procesoru. Volání SwitchOut
s parametrem switchState
nastaveným Nesting
na dobu, kdy se spouští v kořenovém adresáři virtuálního procesoru, způsobí opětovné inicializaci kořene a spuštění aktuálního proxy serveru vlákna bez potřeby. Proxy vláken se považuje za ponechání plánovače, dokud nevolá metodu IThreadProxy::SwitchOut s Blocking
později v čase. Druhé volání SwitchOut
se sadou Blocking
parametrů je určené k vrácení kontextu do blokovaného stavu, aby ho mohl obnovit buď SwitchTo
nebo IVirtualProcessorRoot::Activate
v plánovači, od kterého se odpojil. Protože se nespouštějí v kořenovém adresáři virtuálního procesoru, neprobíhá žádná opětovná inicializace.
Znovu inicializovaný kořen virtuálního procesoru se nijak neliší od úplně nového kořenového adresáře virtuálního procesoru, který plánovač udělil Resource Manageru. Můžete ho použít ke spuštění aktivací s kontextem spuštění pomocí IVirtualProcessorRoot::Activate
.
SwitchOut
musí být volána v IThreadProxy
rozhraní, které představuje aktuálně spuštěné vlákno nebo výsledky nejsou definovány.
V knihovnách a hlavičkách, které byly dodány se sadou Visual Studio 2010, tato metoda nepřebrala parametr a znovu inicializovala kořen virtuálního procesoru. Chcete-li zachovat staré chování, je zadána výchozí hodnota parametru Blocking
.
IThreadProxy::SwitchTo – metoda
Provede kooperativní kontext přepnutí z aktuálně spuštěného kontextu na jiný kontext.
virtual void SwitchTo(
_Inout_ IExecutionContext* pContext,
SwitchingProxyState switchState) = 0;
Parametry
pContext
Kontext provádění, na který se má spolupráce přepnout.
switchState
Označuje stav proxy vlákna, který spouští přepínač. Parametr je typu SwitchingProxyState
.
Poznámky
Tuto metodu použijte k přepnutí z jednoho kontextu spuštění na jiný z IExecutionContext::D ispatch metoda prvního kontextu spuštění. Metoda přidruží kontext pContext
spuštění k proxy vlákna, pokud ještě není přidružena k jednomu. Vlastnictví aktuálního proxy vlákna je určeno hodnotou, kterou pro argument zadáte switchState
.
Tuto hodnotu Idle
použijte, pokud chcete vrátit aktuálně spuštěný proxy vlákno do Resource Manageru. Volání SwitchTo
se sadou Idle
parametrů switchState
způsobí spuštění kontextu pContext
spuštění v podkladovém spouštěcím prostředku. Vlastnictví tohoto proxy vlákna se přenese do Resource Manageru a očekává se, že se vrátíte z metody spuštění Dispatch
brzy po SwitchTo
vrácení, aby bylo možné přenos dokončit. Kontext spuštění, který proxy vlákna odeslal, se odpojí od proxy vlákna a plánovač ho může znovu použít nebo zničit podle potřeby.
Blocking
Hodnotu použijte, pokud chcete, aby tento proxy vlákno zadal blokovaný stav. Volání SwitchTo
se sadou Blocking
parametrů switchState
způsobí spuštění kontextu pContext
spuštění a blokování aktuálního proxy vlákna, dokud se neobnoví. Plánovač si zachová vlastnictví proxy vlákna, pokud je proxy vlákna ve Blocking
stavu. Blokující proxy vlákno lze obnovit voláním funkce SwitchTo
, která přepne do kontextu spuštění tohoto proxy vlákna. Proxy vláken můžete obnovit také pomocí jeho přidruženého kontextu k aktivaci kořenového adresáře virtuálního procesoru. Další informace o tom, jak to provést, naleznete v tématu IVirtualProcessorRoot::Activate.
Nesting
Hodnotu použijte, pokud chcete dočasně odpojit tento proxy vlákno od kořenového adresáře virtuálního procesoru, na kterém běží, a plánovač, pro který odesílá práci. Volání SwitchTo
se sadou Nesting
parametrů switchState
způsobí spuštění kontextu pContext
spuštění a aktuální proxy vlákno také pokračuje, aniž by bylo nutné spustit kořen virtuálního procesoru. Proxy vláken se považuje za ponechání plánovače, dokud nevolá metodu IThreadProxy::SwitchOut v pozdějším bodu v čase. Metoda IThreadProxy::SwitchOut
může blokovat proxy vlákno, dokud nebude k dispozici kořenový adresář virtuálního procesoru pro jeho přeplánování.
SwitchTo
musí být volána v IThreadProxy
rozhraní, které představuje aktuálně spuštěné vlákno nebo výsledky nejsou definovány. Funkce vyvolá, invalid_argument
pokud je parametr pContext
nastaven na NULL
.
IThreadProxy::YieldToSystem – metoda
Způsobí, že volající vlákno způsobí spuštění do jiného vlákna, které je připraveno ke spuštění v aktuálním procesoru. Operační systém vybere další vlákno, které se má spustit.
virtual void YieldToSystem() = 0;
Poznámky
Při zavolání proxy vlákna zálohovaného běžným vláknem Windows se YieldToSystem
chová přesně jako funkce SwitchToThread
Windows . Pokud se však volá z vláken schedable v uživatelském režimu (UMS), SwitchToThread
funkce deleguje úlohu výběru dalšího vlákna ke spuštění do plánovače uživatelského režimu, nikoli operačního systému. Chcete-li dosáhnout požadovaného efektu přepnutí na jiné připravené vlákno v systému, použijte YieldToSystem
.
YieldToSystem
musí být volána v IThreadProxy
rozhraní, které představuje aktuálně spuštěné vlákno nebo výsledky nejsou definovány.
Viz také
concurrency – obor názvů
IExecutionContext – struktura
IScheduler – struktura
IVirtualProcessorRoot – struktura