La classe thread
Définit un objet qui sert à observer et à gérer un thread d’exécution dans une application.
Syntaxe
class thread;
Notes
Vous pouvez utiliser un objet thread
pour observer et gérer un thread d’exécution dans une application. Un thread
objet créé à l’aide du constructeur par défaut n’est associé à aucun thread d’exécution. Un thread
objet construit à l’aide d’un objet pouvant être appelé crée un thread d’exécution et appelle l’objet pouvant être appelé dans ce thread
. Thread
les objets peuvent être déplacés, mais non copiés, c’est pourquoi un thread d’exécution peut être associé à un thread
seul objet.
Chaque thread d’exécution possède un identificateur unique de type thread::id
. La fonction this_thread::get_id
retourne l’identificateur du thread appelant. La fonction thread::get_id
membre retourne l’identificateur du thread géré par un thread
objet. Pour un objet construit thread
par défaut, la thread::get_id
méthode retourne un objet qui a une valeur identique pour tous les objets construits thread
par défaut et différent de la valeur retournée par this_thread::get_id
n’importe quel thread d’exécution pouvant être joint au moment de l’appel.
Membres
Classes publiques
Nom | Description |
---|---|
id |
Identifie de façon unique le thread associé. |
Constructeurs publics
Nom | Description |
---|---|
thread |
Construit un objet thread . |
Méthodes publiques
Nom | Description |
---|---|
detach |
Détache le thread associé de l’objet thread . |
get_id |
Retourne l’identificateur unique du thread associé. |
hardware_concurrency |
Statique. Retourne une estimation du nombre de contextes de thread matériel. |
join |
Bloque jusqu’à ce que le thread associé soit terminé. |
joinable |
Spécifie si le thread associé est joignable. |
native_handle |
Retourne le type propre à l’implémentation qui représente le descripteur de thread. |
swap |
Permute l’état de l’objet avec un objet thread spécifié. |
Opérateurs publics
Nom | Description |
---|---|
thread::operator= |
Associe un thread avec l’objet thread en cours. |
Spécifications
En-tête : <thread>
Espace de noms : std
detach
Détache le thread associé. Le système d’exploitation devient responsable de la libération des ressources de thread lors d’un arrêt.
void detach();
Notes
Après un appel à detach
, les appels suivants pour get_id
retourner id
.
Si le thread associé à l’objet appelant n’est pas joignable, la fonction lève un system_error
code d’erreur .invalid_argument
Si le thread associé à l’objet appelant n’est pas valide, la fonction lève un system_error
code d’erreur de no_such_process
.
get_id
Retourne un identificateur unique du thread associé.
id get_id() const noexcept;
Valeur retournée
Objet id
qui identifie de manière unique le thread associé ou id()
si aucun thread n’est associé à l’objet.
hardware_concurrency
Méthode statique qui retourne une estimation du nombre de contextes de thread matériel.
static unsigned int hardware_concurrency() noexcept;
Valeur retournée
Une estimation du nombre de contextes de thread matériel. Si la valeur ne peut pas être calculée ou n’est pas bien définie, cette méthode retourne 0.
Section spécifique à Microsoft
hardware_concurrency
retourne le nombre de processeurs logiques, qui correspond au nombre de threads matériels qui peuvent s’exécuter simultanément. Il prend en compte le nombre de processeurs physiques, le nombre de cœurs dans chaque processeur physique et le multithreading simultané sur chaque cœur unique.
Avant Windows 11 et Windows Server 2022, les applications étaient limitées par défaut à un seul groupe de processeurs, avec au maximum 64 processeurs logiques. Cela a limité le nombre de threads en cours d’exécution simultanée à 64. Pour plus d’informations, consultez Groupes de processeurs.
À compter de Windows 11 et Windows Server 2022, les processus et leurs threads ont des affinités de processeur qui s’étendent par défaut sur tous les processeurs du système et sur plusieurs groupes sur plusieurs ordinateurs avec plus de 64 processeurs. La limite du nombre de threads simultanés est désormais le nombre total de processeurs logiques dans le système.
Classe id
Fournit un identificateur unique pour chaque thread d’exécution dans le processus.
class thread::id {
id() noexcept;
};
Notes
Le constructeur par défaut crée un objet qui ne correspond pas à l’objet thread::id
d’un thread existant.
Tous les objets thread::id
construits par défaut sont considérés comme égaux.
join
Bloque jusqu’à ce que le thread d’exécution associé à l’objet appelant se termine.
void join();
Notes
Si l’appel réussit, les appels suivants pour get_id
l’objet appelant retournent une valeur par défaut thread::id
qui ne correspond pas à celle thread::id
d’un thread existant ; si l’appel ne réussit pas, la valeur retournée par get_id
est inchangée.
joinable
Spécifie si le thread associé est joignable.
bool joinable() const noexcept;
Valeur retournée
true
si le thread associé est joignable ; sinon, false
.
Notes
Un objet thread est joignable si get_id() != id()
.
native_handle
Retourne le type propre à l’implémentation qui représente le descripteur de thread. Vous pouvez utiliser le descripteur de thread de plusieurs manières propres à l’implémentation.
native_handle_type native_handle();
Valeur retournée
native_handle_type
est défini comme un cast Win32 HANDLE
en tant que void *
.
thread::operator=
Associe le thread d’un objet spécifié à l’objet en cours.
thread& operator=(thread&& Other) noexcept;
Paramètres
Other
Objet thread
.
Valeur retournée
*this
Notes
La méthode appelle detach si l’objet appelant est joignable.
Une fois l’association établie, Other
est défini à un état construit par défaut.
swap
Permute l’état de l’objet avec celui d’un objet thread
spécifié.
void swap(thread& Other) noexcept;
Paramètres
Other
Objet thread
.
Constructeur thread
Construit un objet thread
.
thread() noexcept;
template <class Fn, class... Args>
explicit thread(Fn&& F, Args&&... A);
thread(thread&& Other) noexcept;
Paramètres
F
Fonction définie par l’application à exécuter sur le thread.
A
Liste d’arguments à passer à F
.
Other
Objet thread
existant.
Notes
Le premier constructeur construit un objet qui n’est pas associé à un thread d’exécution. La valeur retournée par get_id
l’objet construit est thread::id()
.
Le deuxième constructeur construit un objet associé à un nouveau thread d’exécution. Il exécute la pseudo-fonction INVOKE
définie dans <functional>
. Si vous ne disposez pas de suffisamment de ressources pour démarrer un nouveau thread, la fonction lève un system_error
objet dont le code d’erreur est resource_unavailable_try_again
. Si l’appel à F
se terminer par une exception non interceptée est terminate
appelé.
Le troisième constructeur construit un objet associé au thread qui est associé à Other
. Other
est ensuite défini à un état construit par défaut.
Voir aussi
Informations de référence sur les fichiers d’en-tête
<thread>