Poznámka:
Přístup k této stránce vyžaduje autorizaci. Můžete se zkusit přihlásit nebo změnit adresáře.
Přístup k této stránce vyžaduje autorizaci. Můžete zkusit změnit adresáře.
Abstrakce pro prováděcí vlákno. 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 plánovatelným (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 | Provádí kooperativní přepnutí z aktuálně vykonávaného kontextu na jiný kontext. |
| IThreadProxy::YieldToSystem | Způsobí, že volající vlákno předá řízení jinému vláknu, které je připraveno ke spuštění na 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
Obor názvů: 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é provádí přepnutí. Parametr je typu SwitchingProxyState.
Poznámky
Použijte SwitchOut, pokud potřebujete z jakéhokoli důvodu zrušit přidružení kontextu od kořene virtuálního procesoru, na kterém běží. 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řenů virtuálních procesorů, které má váš plánovač, buď proto, že vás k tomu vyzval Resource Manager, nebo proto, že jste požádali o dočasný nadkapacitní kořen virtuálního procesoru a tuto potřebu jste již ukončili. 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 obnoví se provádění, když je v plánovači k dispozici jiný kořen virtuálního procesoru. Proxy blokujícího vlákna lze obnovit voláním funkce SwitchTo, která přepne do kontextu vykonávání tohoto proxy vlákna. Proxy vlákna můžete obnovit také pomocí jeho přidruženého kontextu k aktivaci kořene 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žito, když chcete znovu inicializovat virtuální procesor, aby mohl být aktivován v budoucnu, a to buď zablokováním vlákna proxy, nebo dočasným odpojením od virtuálního procesoru, na kterém běží, a od plánovače, pro který rozděluje úkoly. Použijte SwitchOut s parametrem switchState nastaveným na Blocking, pokud chcete blokovat proxy vlákna. Později jej lze obnovit buď pomocí SwitchTo nebo IVirtualProcessorRoot::Activate, jak je uvedeno výše. Použijte SwitchOut s parametrem Nesting nastaveným na, když chcete dočasně odpojit tento proxy vlákno od kořene virtuálního procesoru, na kterém běží, a od plánovače spojeného s virtuálním procesorem. Volání SwitchOut s parametrem switchState nastaveným na Nesting, zatímco běží na virtuálním kořenovém procesoru, způsobí opětovnou inicializaci tohoto kořene a pokračování aktuálního zástupce vlákna ve vykonávání bez potřeby nového. Proxy vláken se považuje za odešelý z plánovače, dokud nezavolá metodu IThreadProxy::SwitchOut s Blocking později. Druhé volání SwitchOut s parametrem nastaveným na Blocking je určeno k tomu, aby vrátilo kontext do blokovaného stavu, aby ho mohl v plánovači, od kterého se odpojil, obnovit buď SwitchTo nebo IVirtualProcessorRoot::Activate. 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řene virtuálního procesoru, který byl vašemu plánovači přidělen Resource Managerem. Můžete ho použít ke spuštění aktivací s kontextem spuštění pomocí IVirtualProcessorRoot::Activate.
SwitchOut musí být zavolána na rozhraní IThreadProxy, které představuje aktuálně běžící vlákno, jinak výsledky nejsou definovány.
V knihovnách a hlavičkách, které byly dodány se sadou Visual Studio 2010, tato metoda nepřijímala parametr a neznovu inicializovala kořenový objekt virtuálního procesoru. Chcete-li zachovat staré chování, je zadána výchozí hodnota parametru Blocking .
IThreadProxy::SwitchTo – metoda
Provádí kooperativní přepnutí z aktuálně vykonávané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é provádí přepnutí. Parametr je typu SwitchingProxyState.
Poznámky
Tuto metodu použijte k přepnutí z jednoho kontextu spuštění do jiného, a to z metody IExecutionContext::Dispatch prvního kontextu spuštění. Metoda přidruží kontext spuštění pContext k proxy vlákna, pokud ještě není přidružený 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 s parametrem switchState nastaveným na Idle způsobí, že se kontext provádění pContext začne vykonávat na podkladovém výpočetním prostředku. Vlastnictví tohoto proxy vlákna se přenese do Správce prostředků a očekává se, že se vrátíte z metody kontextu provádění Dispatch brzy po návratu SwitchTo, 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.
Použijte hodnotu Blocking, pokud chcete, aby toto vlákno proxy vstoupilo do stavu blokace. Volání SwitchTo s parametrem switchState nastaveným na Blocking způsobí spuštění kontextu pContext a zablokování aktuálního proxy vlákna, dokud nebude obnoveno. Plánovač si zachová vlastnictví vláknové proxy, když je ve Blocking stavu. Proxy blokujícího vlákna lze obnovit voláním funkce SwitchTo, která přepne do kontextu vykonávání tohoto proxy vlákna. Proxy vlákna můžete obnovit také pomocí jeho přidruženého kontextu k aktivaci kořene 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 toto proxy vlákno od kořenového adresáře virtuálního procesoru, na kterém je spuštěno, a od plánovače, pro který odesílá práci. Volání SwitchTo s parametrem switchState nastaveným na Nesting způsobí, že kontext pContext začne běžet a aktuální proxy vlákno pokračuje v běhu, aniž by bylo nutné spustit kořen virtuálního procesoru. Proxy vlákna je považován za to, že opustil plánovač, dokud nezavolá metodu IThreadProxy::SwitchOut později. 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áno na rozhraní IThreadProxy, které představuje aktuálně spuštěné vlákno, jinak jsou výsledky nedefinované. Funkce vyvolá, invalid_argument pokud je parametr pContext nastaven na NULL.
IThreadProxy::YieldToSystem – metoda
Způsobí, že volající vlákno předá řízení jinému vláknu, které je připraveno ke spuštění na 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 funkce SwitchToThread volá z plánovatelných vláken v uživatelském režimu (UMS), deleguje úlohu výběru dalšího vlákna ke spuštění na plánovač uživatelského režimu, nikoli na operační systém. 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