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 thread
auf. 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 id
sollenget_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
true
wenn 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.