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 thread
thread::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_id
id
.
Pokud vlákno přidružené k volajícímu objektu není možné spojit, funkce vyvolá system_error
kód invalid_argument
chyby .
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
true
pokud 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_again
chyby . 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.