Wie bekomme ich Thread -ID in C++?

Wie bekomme ich Thread -ID in C++?
Bevor Sie wissen, wie Sie die Thread -ID eines Threads erhalten, müssen Sie zunächst die beiden Formen der Thread -ID in C kennen++. Dies entspricht dem Wissen, welche ID erhalten wird, wenn der Thread nicht ausgeführt wird und welche ID erhalten wird, wenn der Thread ausgeführt wird. Ausführen bedeutet auszuführen. Eine ID (für die Kennung) ist das, was etwas identifiziert. In C ++ ist der Name für die Thread -ID ID in Kleinbuchstaben.

Für den Thread in C ++ ist eine ID ein Objekt mit Datenmitgliedern und Mitgliedsfunktionen. Dieses ID -Objekt hat einen Textcode, der normalerweise als ID betrachtet wird. Das ID -Objekt verwendet das << operator to send the text code to the cout object (terminal). The id object and its text code are different from when the thread is not running to when it is running.

Der Thread ist eine Klasse, in der das ID -Objekt ein Datenelement ist. Das ID -Objekt kann mit der folgenden Syntax erhalten werden:

Thread :: get_id ()

Die Syntax "Thread :: get_id ()" kann verwendet werden, wenn der Thread nicht ausgeführt wird und auch wenn der Thread ausgeführt wird, und es gibt verschiedene Objekte und entsprechende Textcodes für die beiden verschiedenen Situationen.

Eine Möglichkeit, die Thread -ID im Thread -Körper während des Laufens zu erhalten, besteht darin, die Syntax zu verwenden:

this_thread :: get_id ()

Alle ausgeführten Themen haben unterschiedliche ID -Objekte und entsprechende Textcodes. Alle Threads, die nicht ausgeführt werden, haben den gleichen entsprechenden Textcode für dasselbe Programm. Obwohl sie den gleichen Textcode haben, haben alle Threads, die nicht ausgeführt werden.

Ein Thread, der ausgeführt wird.

Verwenden Sie ein ähnliches Befehl wie:

g ++ -std = c ++ 2a tempe.CPP -LPThread -o -Temp

In diesem Artikel werden verschiedene Möglichkeiten erläutert, IDs unterschiedlicher Threads in C ++ zu erhalten, beginnend mit einer Zusammenfassung dessen, was ein Thread ist.

Artikelinhalt

  • Fadenzusammenfassung
  • Thread -ID erhalten
  • Verwendung von this_thread :: get_id ()
  • Abschluss

Fadenzusammenfassung

Ein Faden ist ein Gehäuse einer Funktion auf der oberen Ebene. Ein Thread wird aus der Thread -Klasse instanziiert. Der Name der obersten Funktion ist ein Argument für die Konstruktorfunktion des Thread-Objekts. Die main () -Funktion in C ++ ist auch eine Funktion auf der obersten Ebene. Die Funktion main () verhält sich also wie der Hauptfaden. Das folgende Programm zeigt zwei Themen, von denen die main () -Funktion eine ist:

#enthalten
#enthalten
Verwenden von Namespace STD;
Faden Thr;
void Fun ()
Cout <<"This is line A." <Cout <<"This is line B." <
int main ()

Thr = Thread (Spaß);
TH.verbinden();
/ * Aussagen */
Rückkehr 0;

Die Ausgabe ist:

Dies ist Zeile a.
Dies ist Zeile B.

Die Funktionen der obersten Ebene sind Spaß () und Main (). main () ist wie der Hauptfaden. Der Name der oberen Funktionsfunktion, Fun ().

Das Programm beginnt mit der Aufnahme der iostream -Bibliothek. Darauf folgt die Aufnahme der Threadbibliothek. Die Anweisung danach stellt sicher, dass jeder im Programm verwendete Name im Standard -Namespace ist, sofern nicht anders angegeben.

Als nächstes wird der Thread TH ohne einen Funktionsaufruf deklariert. Die obere Funktion Fun () wird dann definiert. Danach ist die Definition der main () -Funktion. Die erste Anweisung in Main () weist die Funktion Fun () dem Thread, THR sowie die Funktion zu.

Die zweite Aussage in Main () ist die Join -Erklärung. Wenn diese Aussage nicht vorhanden ist, kann der Haupt -Thread ohne den Thread bis zu seinem eigenen Abschluss abgeschlossen werden. Mit dieser Anweisung an dem Punkt, an dem die Anweisung eingegeben wird, stoppt der Haupt -Thread (Funktion) (Blöcke) und ermöglicht es dem zusammengeschlossenen Thread (THR) bis zu seiner Fertigstellung; Bevor der Hauptfaden seine eigene Fertigstellung fortsetzt. Ein Versuch, das Programm ohne die Join -Anweisung zu kompilieren, sollte eine Fehlermeldung und ohne Zusammenstellung haben.

Wenn der Thread mit der Erklärung deklariert wird,

Faden Thr;

Es ist kein laufender Thread; Es wird keine Funktion ausgeführt. Wenn der Thread jedoch einen Funktionsnamen als Argument wie in erhält,

Thr = Thread (Spaß);

Es wird ein laufender Thread. Diese Anweisung ist auch ein Funktionsaufruf für die Funktion, Fun ().

Nach der Join -Anweisung in der Hauptfunktion, des Threads, hat Thr seine Ausführung abgeschlossen und ist kein laufender Thread mehr. In diesem Zustand unterscheidet sich seine ID von dem Zeitpunkt, als es lief.

Thread -ID erhalten

Das folgende Programm zeigt die grundlegende Möglichkeit, die Thread -ID zu erhalten, wenn der Thread nicht ausgeführt wird und auch wenn sie ausgeführt wird:

#enthalten
#enthalten
Verwenden von Namespace STD;
Faden Thr;
void Fun ()
Cout <<"This is line A." <Thread :: id idr = Thr.get_id ();
Cout <Cout <<"This is line B." <
int main ()

Thread :: id idd = Thr.get_id ();
Cout <Thr = Thread (Spaß);
TH.verbinden();
// Cout </ * Aussagen */
Rückkehr 0;

Die Ausgabe des Computers des Autors ist:

Thread :: ID eines nicht ausgeführten Threads
Dies ist Zeile a.
140362842543872
Dies ist Zeile B.

Thr ist eine globale Variable. Es wird innerhalb des Funktionskörpers des Threads in der Anweisung verwendet:

Thread :: id idr = Thr.get_id ();

Die Variable, die das erhaltene Thread -Objekt hält, ist IDR. Obwohl ID ein instanziiertes Objekt ist, ist es auch ein Mitglied der Thread -Klasse. Die IDR -Erklärung muss also sein:

Thread :: ID IDR

mit dem Semikolon. Die nächste Aussage danach ist:

Cout <

Der Bediener, <

Thread :: id idd = Thr.get_id ();

in der main () Funktion. Es ist dasselbe wie die im Thread ausgeführten Funktion, mit Ausnahme der empfangenden Variablen, IDD. Diese Anweisung wird vor dem Thread ausgeführt, Thr wird eine Funktion zugewiesen. Die Text -ID (Code) für diesen Thread, der nicht ausführt, lautet:

Thread :: ID eines nicht ausgeführten Threads

Während der Funktion main () funktion hat der thread thr seine eigene Ausführung nach der Join -Anweisung beendet. Und so: „Thr.get_id () “sollte in der Lage sein, die ID des Threads zurückzugeben, wenn er nicht ausführt. Ab sofort hat das mit G ++ zusammengestellte C ++ - Programm Schwierigkeiten, die ID des Threads zu erhalten, die bis zur Fertigstellung ausgeführt wurde. Aus diesem Grund wird die ID -Anweisung nach der Join -Anweisung im obigen Code kommentiert.

Verwendung von this_thread :: get_id ()

"This_Thread ::" wird im Ausführungs Thread codiert (Funktion). Es repräsentiert den Thread, der derzeit ausgeführt wird. Es kann eine Funktion für den Thread folgen, z. B. get_id (), um zu haben

this_thread :: get_id ()

Um die ID des laufenden Threads des Threads zu erhalten, die sich von der ID unterscheidet, wenn der Thread nicht ausgeführt wird.

"This_Thread ::" wird innerhalb des Funktionskörpers eines Threads verwendet. Das folgende Programm zeigt dies für den Thread Thr:

#enthalten
#enthalten
Verwenden von Namespace STD;
Faden Thr;
void Fun ()
Cout <<"This is line A." <Thread :: id idr = this_thread :: get_id ();
Cout <Cout <<"This is line B." <
int main ()

Thread :: id idd = Thr.get_id ();
Cout <Thr = Thread (Spaß);
TH.verbinden();
Rückkehr 0;

Die Ausgabe des Computers des Autors ist:

Thread :: ID eines nicht ausgeführten Threads
Dies ist Zeile a.
140199206078208
Dies ist Zeile B.

Beachten Sie, dass der Thread -Name Thr in diesem Fall nicht innerhalb der Thread -Funktionsbehörde verwendet wurde.

Abschluss

Es gibt zwei Formen der Thread -ID in C++. Die ID, wenn der Thread ausgeführt wird, unterscheidet sich von der ID, wenn der Thread nicht ausgeführt wird. Eine ID (für die Kennung) ist das, was etwas identifiziert. In C ++ ist der Name für die Thread -ID ID in Kleinbuchstaben. Dies ist ein Datenmitglied in der Thread -Klasse. Es ist kein grundlegendes Objekt. Es wird aus seiner eigenen Klasse, des Namespace, Thread :: id instanziiert. Obwohl die ID ein Objekt ist, hat sie ein entsprechendes Textformular. Das Textformular kann mit dem C ++ - Insertionsoperator in das Cout -Objekt (Klemme) eingefügt werden, <<.

Jeder Thread hat zwei verschiedene IDs: einen, wenn der Thread ausgeführt wird; und der andere, wenn der Thread nicht läuft. Wenn der Thread nicht ausgeführt wird, unterscheidet sich die Textform für die ID von der Textform, wenn der Thread für denselben Thread ausgeführt wird.

Die C ++ - Spezifikation enthält verschiedene Möglichkeiten, um die Thread -ID zu erhalten. Ab sofort sind mit dem G ++ - Compiler die einzige Möglichkeit, die ID zu erhalten, aus den Ausdrücken: „ThreadObject.get_id () "und" this_thread :: get_id () ". "This_Thread :: get_id ()" wird im Funktionsorganisation des ausführenden Threads verwendet, wobei sich "this_thread ::" auf den aktuell ausgeführten Thread bezieht. Ein ausgeführter Thread wird als Ausführungsthread bezeichnet.