thread-Klasse

Definiert ein Objekt, das zum Überwachen und Verwalten eines Ausführungsthreads innerhalb einer Anwendung verwendet wird.

Syntax

class thread;

Hinweise

Sie können ein thread-Objekt zum Überwachen und Verwalten eines Ausführungsthreads innerhalb einer Anwendung verwenden. Ein thread Objekt, das mit dem Standardkonstruktor erstellt wird, ist keinem Ausführungsthread zugeordnet. Ein thread Objekt, das mithilfe eines aufrufbaren Objekts erstellt wird, erstellt einen neuen Ausführungsthread und ruft das aufrufbare Objekt darin threadauf. Thread Objekte können verschoben, aber nicht kopiert werden, weshalb ein Ausführungsthread nur einem thread Objekt zugeordnet werden kann.

Jeder Ausführungsthread besitzt einen eindeutigen Bezeichner des Typs thread::id. Die this_thread::get_id-Funktion gibt den Bezeichner des aufrufenden Threads zurück. Die Memberfunktion thread::get_id gibt den Bezeichner des Threads zurück, der von einem thread Objekt verwaltet wird. Bei einem standardmäßig konstruierten thread Objekt gibt die thread::get_id Methode ein Objekt zurück, das einen Wert aufweist, der für alle standard konstruierten thread Objekte identisch ist und sich von dem Wert unterscheidet, der für jeden Thread der Ausführung zurückgegeben this_thread::get_id wird, der zum Zeitpunkt des Aufrufs verknüpft werden kann.

Member

Öffentliche Klassen

Name Beschreibung
id Identifiziert den zugeordneten Thread eindeutig.

Öffentliche Konstruktoren

Name Beschreibung
thread Erstellt ein thread-Objekt.

Öffentliche Methoden

Name Beschreibung
detach Trennt den zugeordneten Thread vom thread-Objekt.
get_id Gibt den eindeutigen Bezeichner des zugeordneten Threads zurück.
hardware_concurrency Statisch. Gibt eine Schätzung der Anzahl von Hardwarethreadkontexten zurück.
join Blockiert, bis der zugeordnete Thread abgeschlossen ist.
joinable Gibt an, ob dem zugehörigen Thread beigetreten werden kann.
native_handle Gibt den implementierungsspezifischen Typ zurück, der das Threadhandle darstellt.
swap Tauscht den Objektzustand mit einem angegebenen thread-Objekt aus.

Öffentliche Operatoren

Name Beschreibung
thread::operator= Weist einem Thread das aktuelle thread-Objekt zu.

Anforderungen

Header: <thread>

Namespace:std

detach

Trennt den zugeordneten Thread. Das Betriebssystem wird zum Freigeben von Threadressourcen zuständig.

void detach();

Hinweise

Nach einem Anruf an detach, nachfolgende Aufrufe, die zurückgegeben werden idsollenget_id.

Wenn der dem aufrufenden Objekt zugeordnete Thread nicht verknüpft werden kann, löst die Funktion einen system_error Fehlercode aus invalid_argument.

Wenn der dem aufrufenden Objekt zugeordnete Thread ungültig ist, löst die Funktion einen system_error Fehlercode aus no_such_process.

get_id

Gibt den eindeutigen Bezeichner für den zugeordneten Threads zurück.

id get_id() const noexcept;

Rückgabewert

Ein id Objekt, das den zugeordneten Thread eindeutig identifiziert oder id() wenn dem Objekt kein Thread zugeordnet ist.

hardware_concurrency

Statische Methode, diet eine Schätzung der Anzahl von Hardwarethreadkontexten zurückgibt.

static unsigned int hardware_concurrency() noexcept;

Rückgabewert

Eine Schätzung der Anzahl von Hardwarethreadkontexten. Wenn der Wert nicht berechnet werden kann oder nicht gut definiert ist, gibt diese Methode 0 zurück.

Microsoft-spezifisch

hardware_concurrency gibt die Anzahl der logischen Prozessoren zurück, die der Anzahl der Hardwarethreads entspricht, die gleichzeitig ausgeführt werden können. Es berücksichtigt die Anzahl der physischen Prozessoren, die Anzahl der Kerne in jedem physischen Prozessor und gleichzeitiges Multithreading auf jedem einzelnen Kern.

Vor Windows 11 und Windows Server 2022 waren Anwendungen standardmäßig auf eine einzelne Prozessorgruppe beschränkt, wobei höchstens 64 logische Prozessoren vorhanden sind. Dadurch wird die Anzahl der gleichzeitig ausgeführten Threads auf 64 beschränkt. Weitere Informationen finden Sie unter Prozessorgruppen.

Ab Windows 11 und Windows Server 2022 verfügen Prozesse und deren Threads über Prozessoraffinitäten, die standardmäßig alle Prozessoren im System und mehrere Gruppen auf Computern mit mehr als 64 Prozessoren umfassen. Der Grenzwert für die Anzahl gleichzeitiger Threads ist nun die Gesamtanzahl der logischen Prozessoren im System.

id-Klasse

Stellt einen eindeutigen Bezeichner für jeden Thread der Ausführung im Prozess bereit.

class thread::id {
    id() noexcept;
};

Hinweise

Der Standardkonstruktor erstellt ein Objekt, das nicht mit dem thread::id Objekt für einen vorhandenen Thread verglichen wird.

Alle mit dem Standwert konstruierten thread::id-Objekte gelten als gleich.

join

Blockiert, bis der Thread der Ausführung, der dem aufrufenden Objekt zugeordnet ist, abgeschlossen ist.

void join();

Hinweise

Wenn der Aufruf erfolgreich ist, geben nachfolgende Aufrufe get_id für das aufrufende Objekt einen Standardwert thread::id zurück, der nicht mit dem thread::id vorhandenen Thread verglichen wird. Wenn der Aufruf nicht erfolgreich ist, ist der von get_id diesem zurückgegebene Wert unverändert.

joinable

Gibt an, ob dem zugehörigen Thread beigetreten werden kann.

bool joinable() const noexcept;

Rückgabewert

truewenn der zugeordnete Thread verknüpft werden kann; andernfalls . false

Hinweise

Ein Threadobjekt kann verknüpft werden, wenn get_id() != id().

native_handle

Gibt den implementierungsspezifischen Typ zurück, der das Threadhandle darstellt. Das Threadhandle kann je nach Implementierung auf die jeweils entsprechende Weise verwendet werden.

native_handle_type native_handle();

Rückgabewert

native_handle_type ist als Win32-Umwandlung HANDLE definiert als void *.

thread::operator=

Ordnet den Thread für das angegebene Objekt dem aktuellen Objekt zu.

thread& operator=(thread&& Other) noexcept;

Parameter

Other
Ein thread-Objekt.

Rückgabewert

*this

Bemerkungen

Die Methodenaufrufe trennen, wenn dem aufrufenden Objekt beigetreten werden kann.

Nach dem Erstellen die Zuordnung wird Other auf einen standardmäßig konstruierten Zustand festgelegt.

swap

Tauscht den Objektzustand mit dem eines angegebenen thread-Objekts aus.

void swap(thread& Other) noexcept;

Parameter

Other
Ein thread-Objekt.

thread-Konstruktor

Erstellt ein thread-Objekt.

thread() noexcept;
template <class Fn, class... Args>
explicit thread(Fn&& F, Args&&... A);

thread(thread&& Other) noexcept;

Parameter

F
Eine anwendungsdefinierte Funktion, die im Thread ausgeführt werden soll.

A
Eine Liste von Argumenten, die an F übergeben werden sollen.

Other
Ein vorhandenes thread-Objekt.

Hinweise

Der erste Konstruktor erstellt ein Objekt, das nicht einem Thread der Ausführung zugeordnet ist. Der für das konstruierte Objekt zurückgegebene get_id Wert ist thread::id().

Der zweite Konstruktor erstellt ein Objekt, das einem neuen Ausführungsthread zugeordnet ist. Sie führt die pseudofunktion INVOKE aus, die in <functional>. Wenn nicht genügend Ressourcen zum Starten eines neuen Threads verfügbar sind, löst die Funktion ein system_error Objekt aus, das über einen Fehlercode verfügt resource_unavailable_try_again. Wenn der Anruf F beendet wird, der mit einer ausnahme nicht abgeschlossenen Ausnahme auftritt, terminate wird er aufgerufen.

Der dritte Konstruktor erstellt ein Objekt, das mit dem Thread verknüpft ist, der Other zugeordnet ist. Other wird dann auf einen standardmäßig konstruierten Zustand festgelegt.

Siehe auch

Headerdateienreferenz
<thread>