Sdílet prostřednictvím


thread Třída

Definuje objekt, který umožňuje sledovat a spravovat vlákno provádění v rámci aplikace.

Syntaxe

class thread;

Poznámky

Pomocí objektu thread můžete sledovat a spravovat vlákno provádění v rámci aplikace. Objekt thread vytvořený pomocí výchozího konstruktoru není přidružený k žádnému vláknu provádění. Objekt thread vytvořený pomocí volatelného objektu vytvoří nové vlákno provádění a zavolá volatelný objekt v tom thread. Thread objekty lze přesunout, ale ne zkopírovat, což je důvod, proč lze vlákno provádění přidružit pouze k jednomu thread objektu.

Každé vlákno provádění má jedinečný identifikátor typu thread::id. Funkce this_thread::get_id vrací identifikátor volajícího vlákna. Členská funkce thread::get_id vrátí identifikátor vlákna spravovaného objektem thread . U objektu vytvořeného threadthread::get_id ve výchozím nastavení vrátí metoda objekt, který má hodnotu, která je stejná pro všechny objekty vytvořené thread ve výchozím nastavení a liší se od hodnoty vrácené this_thread::get_id pro jakékoli vlákno provádění, které by bylo možné spojit v době volání.

Členové

Veřejné třídy

Název Popis
id Jednoznačně identifikuje přidružené vlákno.

Veřejné konstruktory

Název Popis
thread thread Vytvoří objekt.

Veřejné metody

Název Popis
detach Odpojte přidružené vlákno od objektu thread .
get_id Vrací jedinečný identifikátor přidruženého vlákna.
hardware_concurrency Statický. Vrací odhadovaný počet kontextů hardwarových vláken.
join Blokuje, dokud se přidružené vlákno nedokončí.
joinable Určuje, zda je přidružené vlákno spojitelné.
native_handle Vrátí typ specifický pro implementaci představující popisovač vlákna.
swap Prohodí stav objektu se zadaným thread objektem.

Veřejné operátory

Název Popis
thread::operator= Přidruží vlákno k aktuálnímu thread objektu.

Požadavky

Záhlaví:<thread>

Obor názvů:std

detach

Odpojte přidružené vlákno. Operační systém je zodpovědný za uvolnění prostředků vlákna při ukončení.

void detach();

Poznámky

Po volání detach, následná volání vrátit get_idid.

Pokud vlákno přidružené k volajícímu objektu není možné spojit, funkce vyvolá system_error kód invalid_argumentchyby .

Pokud je vlákno přidružené k volajícímu objektu neplatné, funkce vyvolá system_error kód chyby no_such_process.

get_id

Vrátí jedinečný identifikátor přidruženého vlákna.

id get_id() const noexcept;

Vrácená hodnota

Objekt id , který jednoznačně identifikuje přidružené vlákno nebo id() pokud není k objektu přidruženo žádné vlákno.

hardware_concurrency

Statická metoda, která vrací odhad počtu kontextů hardwarových vláken.

static unsigned int hardware_concurrency() noexcept;

Vrácená hodnota

Odhad počtu kontextů hardwarových vláken Pokud hodnotu nelze vypočítat nebo není dobře definovaná, vrátí tato metoda hodnotu 0.

Specifické pro Microsoft

hardware_concurrency vrátí počet logických procesorů, které odpovídají počtu hardwarových vláken, která lze spustit současně. Bere v úvahu počet fyzických procesorů, počet jader v každém fyzickém procesoru a souběžné multithreading na každém jádru.

Před Windows 11 a Windows Serverem 2022 byly aplikace ve výchozím nastavení omezené na jednu skupinu procesorů, která má maximálně 64 logických procesorů. Tím se omezil počet souběžně spuštěných vláken na 64. Další informace naleznete v tématu Skupiny procesorů.

Počínaje Systémy Windows 11 a Windows Server 2022 mají procesy a jejich vlákna spřažení procesorů, které ve výchozím nastavení pokrývají všechny procesory v systému a napříč několika skupinami na počítačích s více než 64 procesory. Limit počtu souběžných vláken je teď celkový počet logických procesorů v systému.

Třída id

Poskytuje jedinečný identifikátor pro každé vlákno provádění v procesu.

class thread::id {
    id() noexcept;
};

Poznámky

Výchozí konstruktor vytvoří objekt, který se nerovná objektu thread::id pro žádné existující vlákno.

Všechny objekty vytvořené thread::id ve výchozím nastavení se porovnávají stejně.

join

Blokuje, dokud se vlákno provádění přidružené k volajícímu objektu dokončí.

void join();

Poznámky

Pokud volání proběhne úspěšně, následná volání get_id volajícího objektu vrátí výchozí thread::id hodnotu, která se nerovná žádnému thread::id existujícímu vláknu. Pokud volání neuspěje, hodnota vrácená objektem get_id se nezmění.

joinable

Určuje, zda je přidružené vlákno spojitelné.

bool joinable() const noexcept;

Vrácená hodnota

truepokud je přidružené vlákno spojitelné; v opačném případě . false

Poznámky

Objekt vlákna je spojitelný, pokud get_id() != id().

native_handle

Vrátí typ specifický pro implementaci představující popisovač vlákna. Popisovač vlákna lze použít v konkrétních způsobech implementace.

native_handle_type native_handle();

Vrácená hodnota

native_handle_type je definován jako přetypování Win32 HANDLE jako void *.

thread::operator=

Přidruží vlákno zadaného objektu k aktuálnímu objektu.

thread& operator=(thread&& Other) noexcept;

Parametry

Other
Objekt thread .

Vrácená hodnota

*this

Poznámky

Metoda volá odpojení, pokud volající objekt je spojitelný.

Po vytvoření Other přidružení se nastaví výchozí vytvořený stav.

swap

Prohodí stav objektu s daným objektem thread .

void swap(thread& Other) noexcept;

Parametry

Other
Objekt thread .

thread konstruktor

thread Vytvoří objekt.

thread() noexcept;
template <class Fn, class... Args>
explicit thread(Fn&& F, Args&&... A);

thread(thread&& Other) noexcept;

Parametry

F
Funkce definovaná aplikací, která se má spustit ve vlákně.

A
Seznamargumentch F

Other
Existující objekt thread.

Poznámky

První konstruktor vytvoří objekt, který není přidružen k vláknu provádění. Hodnota vrácená get_id pro vytvořený objekt je thread::id().

Druhý konstruktor vytvoří objekt, který je přidružený k novému vláknu provádění. Spustí pseudofunkci INVOKE definovanou v <functional>. Pokud není k dispozici dostatek prostředků pro spuštění nového vlákna, funkce vyvolá system_error objekt, který má kód resource_unavailable_try_againchyby . Pokud se volání ukončí F s nezachycenou výjimkou, terminate je volána. Volání F nesmí způsobit předčasné ukončení vlákna, například voláním ExitThread nebo _endthreadex.

Třetí konstruktor vytvoří objekt, který je přidružen k vláknu, které je přidruženo Other. Other je pak nastaven na výchozí konstruovaný stav.

Viz také

Referenční informace k souborům hlaviček
<thread>