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