Partager via


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>