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 SwitchToThreadWindows . 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