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
Jméno | popis |
---|---|
id |
Jednoznačně identifikuje přidružené vlákno. |
Veřejné konstruktory
Jméno | popis |
---|---|
thread |
thread Vytvoří objekt. |
Veřejné metody
Jméno | 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
Jméno | 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 no_such_process
chyby .
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 k objektu není 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
je aktuálně definován tak, aby vracel počet logických procesorů, což odpovídá počtu hardwarových vláken, která se můžou 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.
V systémech s více než 64 logickými procesory je však toto číslo omezeno počtem logických procesorů v jedné skupině; viz Skupiny procesorů.
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 nedokončí vlákno spuštění přidruženého k volajícímu objektu.
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 Win32 HANDLE
, který se přetypuje 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í, kterou má vlákno spustit.
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á voláním 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í a spustí pseudo-funkci INVOKE
, která je definována 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.
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é
Váš názor
https://aka.ms/ContentUserFeedback.
Připravujeme: V průběhu roku 2024 budeme postupně vyřazovat problémy z GitHub coby mechanismus zpětné vazby pro obsah a nahrazovat ho novým systémem zpětné vazby. Další informace naleznete v tématu:Odeslat a zobrazit názory pro