Come ottengo l'ID thread in c++?

Come ottengo l'ID thread in c++?
Prima di sapere come ottenere l'ID thread di un thread, devi prima conoscere le due forme dell'ID thread in C++. Ciò corrisponde a sapere quale ID si ottiene quando il thread non è in esecuzione e quale ID si ottiene quando il thread è in esecuzione. Esecuzione significa eseguire. Un ID (per l'identificatore) è ciò che identifica qualcosa. In C ++, il nome per l'ID thread è ID, in minuscolo.

Per il thread in C ++, un ID è un oggetto con i membri dei dati e le funzioni del membro. Questo oggetto ID ha un codice di testo, che è ciò che le persone normalmente considerano l'ID. L'oggetto ID utilizza il file << 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.

Il thread è una classe in cui l'oggetto ID è un membro dei dati. L'oggetto ID può essere ottenuto con la seguente sintassi:

Discussione :: get_id ()

La sintassi "thread :: get_id ()" può essere utilizzata quando il thread non è in esecuzione e anche quando il thread è in esecuzione e fornirà oggetti diversi e codici di testo corrispondenti per le due diverse situazioni.

Un modo per ottenere l'ID thread all'interno del corpo del thread mentre è in esecuzione è utilizzare la sintassi:

this_thread :: get_id ()

Tutti i thread in esecuzione hanno oggetti ID diversi e codici di testo corrispondenti. Tutti i thread che non sono in esecuzione hanno lo stesso codice di testo corrispondente per lo stesso programma. Sebbene abbiano lo stesso codice di testo, tutti i thread che non sono in esecuzione hanno oggetti ID diversi perché gli oggetti sono riferimenti e non puntatori.

Un thread che viene in esecuzione viene definito un thread di esecuzione.

Per compilare un programma di thread, con il compilatore G ++, utilizzare un comando simile a:

g ++ -std = c ++ 2a temp.cpp -lpthread -o temp

Questo articolo spiega diversi modi per ottenere ID di diversi thread in C ++, a cominciare da un riepilogo di cosa sia un thread.

Contenuto dell'articolo

  • Riepilogo della discussione
  • Ottenere ID thread
  • Uso di questo_Thread :: get_id ()
  • Conclusione

Riepilogo della discussione

Un thread è un involucro di una funzione di alto livello. Un thread è istanziato dalla classe thread. Il nome della funzione di livello superiore è un argomento alla funzione del costruttore dell'oggetto thread. La funzione principale () in C ++ è anche una funzione di alto livello. Quindi la funzione principale () si comporta come il filo principale. Il seguente programma mostra due thread di cui la funzione principale () è una:

#includere
#includere
Utilizzo dello spazio dei nomi std;
Discussione Thr;
void fun ()
cout <<"This is line A." <cout <<"This is line B." <
int main ()

thr = thread (divertimento);
thr.giuntura();
/ * dichiarazioni */
restituzione 0;

L'output è:

Questa è la linea a.
Questa è la linea B.

Le funzioni di alto livello sono divertenti () e main (). main () è come il filo principale. Il nome della funzione di alto livello, Fun () è l'argomento per il costruttore del thread, thr, nella funzione principale.

Il programma inizia con l'inclusione della libreria iostream. Questo è seguito dall'inclusione della libreria. La dichiarazione successiva garantisce che qualsiasi nome utilizzato nel programma sia dello spazio dei nomi standard se non diversamente indicato.

Successivamente, il threw thr viene dichiarato senza una chiamata di funzione. La funzione di alto livello, Fun () viene quindi definita. Successivamente è la definizione della funzione principale (). La prima istruzione in main (), assegna la funzione, fun () al thread, thr, oltre a chiamare la funzione.

La seconda dichiarazione in main () è la dichiarazione di join. Se questa affermazione è assente, il thread principale può essere eseguito fino al completamento senza il thread, thr in esecuzione al suo completamento. Con questa affermazione, nel punto in cui viene digitata l'istruzione, il thread principale (funzione) si interrompe (blocchi) e consente al thread unito (thr) di eseguire al suo completamento; Prima che il thread principale continui al suo completamento. Un tentativo di compilare il programma senza l'istruzione join dovrebbe finire con un messaggio di errore e nessuna compilazione.

Quando il thread viene dichiarato con l'istruzione,

Discussione Thr;

Non è un thread in esecuzione; Nessuna funzione è in esecuzione. Tuttavia, quando il thread, thr viene dato un nome di funzione come argomento, come in,

thr = thread (divertimento);

diventa un thread in esecuzione. Questa affermazione è anche una chiamata di funzione, per la funzione, fun ().

Dopo l'istruzione di join nella funzione principale, il thread, THR ha completato la sua esecuzione e non è più un thread in esecuzione. In quello stato, il suo ID è diverso da quando era in esecuzione.

Ottenere ID thread

Il seguente programma mostra il modo base di ottenere l'ID thread quando il thread non viene eseguito e anche quando viene eseguito:

#includere
#includere
Utilizzo dello spazio dei nomi std;
Discussione Thr;
void fun ()
cout <<"This is line A." <Discussione :: id idr = thr.get_id ();
cout <cout <<"This is line B." <
int main ()

Discussione :: id iDD = thr.get_id ();
cout <thr = thread (divertimento);
thr.giuntura();
// cout </ * dichiarazioni */
restituzione 0;

L'output del computer dell'autore è:

Discussione :: id di un thread non esecutivo
Questa è la linea a.
140362842543872
Questa è la linea B.

thr è una variabile globale. Viene utilizzato all'interno del corpo funzione del thr thr, nell'istruzione:

Discussione :: id idr = thr.get_id ();

La variabile che tiene l'oggetto thread ottenuto è IDR. Sebbene l'ID sia un oggetto istanziato, è anche un membro della classe thread. Quindi la dichiarazione di IDR deve essere:

Discussione :: id idr

con il punto e virgola. La prossima affermazione dopo questo è:

cout <

L'operatore, <

Discussione :: id iDD = thr.get_id ();

Nella funzione principale (). È lo stesso di quello nella funzione di esecuzione del thread, ad eccezione della variabile di ricezione, IDD. Questa istruzione viene eseguita prima del thread, a THR viene assegnata una funzione. L'ID di testo (codice) per questo thread che non è in esecuzione è:

Discussione :: id di un thread non esecutivo

Durante l'esecuzione della funzione principale (), il thread ha terminato la propria esecuzione dopo l'istruzione join. E così, "Thr.get_id () "dovrebbe essere in grado di restituire l'ID del thread quando non è eseguita. A partire da ora, il programma C ++ compilato con G ++ ha difficoltà a ottenere l'ID del thread che è stato eseguito fino al completamento. Ecco perché viene commentata l'istruzione ID dopo l'istruzione join nel codice sopra.

Uso di questo_Thread :: get_id ()

"This_thread ::" è codificato all'interno del thread di esecuzione (funzione). Rappresenta il thread che è attualmente in esecuzione. Può essere seguito da una funzione per il thread, come get_id (), per avere

this_thread :: get_id ()

Per ottenere l'ID del thread in esecuzione del thread, che è diverso dall'ID quando il thread non è in esecuzione.

"This_thread ::" è usato all'interno del corpo della funzione di thread. Il seguente programma lo illustra per il thread, thr:

#includere
#includere
Utilizzo dello spazio dei nomi std;
Discussione Thr;
void fun ()
cout <<"This is line A." <thread :: id idr = this_thread :: get_id ();
cout <cout <<"This is line B." <
int main ()

Discussione :: id iDD = thr.get_id ();
cout <thr = thread (divertimento);
thr.giuntura();
restituzione 0;

L'output del computer dell'autore è:

Discussione :: id di un thread non esecutivo
Questa è la linea a.
140199206078208
Questa è la linea B.

Si noti che il nome del thread, Thr, non è stato utilizzato all'interno del corpo della funzione thread, in questo caso.

Conclusione

Esistono due forme dell'ID thread in C++. L'ID quando il thread viene eseguito è diverso dall'ID quando il thread non viene eseguito. Un ID (per l'identificatore) è ciò che identifica qualcosa. In C ++, il nome per l'ID thread è ID, in minuscolo. Questo è un membro dei dati nella classe thread. Non è un oggetto fondamentale. È istanziato dalla sua stessa classe, dello spazio dei nomi, thread :: id. Sebbene l'ID sia un oggetto, ha un modulo di testo corrispondente. Il modulo di testo può essere inserito nell'oggetto Cout (terminale) con l'operatore di inserimento C ++, <<.

Ogni thread ha due ID diversi: uno quando il thread è in esecuzione; e l'altro quando il thread non è in esecuzione. Quando il thread non è in esecuzione, il modulo di testo per l'ID è diverso dal modulo di testo quando il thread è in esecuzione per lo stesso thread.

La specifica C ++ ha vari modi per ottenere l'ID thread. Tuttavia, a partire da ora, con il compilatore G ++, gli unici modi per ottenere l'ID provengono dalle espressioni: “ThreadObject.get_id () "e" this_thread :: get_id () ". "This_thread :: get_id ()" viene utilizzato all'interno del corpo della funzione del thread in esecuzione, in cui "this_thread ::" si riferisce al thread attualmente in esecuzione. Un thread in esecuzione viene definito un thread di esecuzione.