Hvordan får jeg tråd -ID i C++?

Hvordan får jeg tråd -ID i C++?
Før du vet hvordan du får tråd -ID for en tråd, må du først kjenne de to formene for tråd -IDen i C++. Dette tilsvarer å vite hvilken ID som oppnås når tråden ikke kjører og hvilken ID som oppnås når tråden kjører. Løping betyr å utføre. En ID (for identifikator) er det som identifiserer noe. I C ++ er navnet på tråd -ID ID, i små bokstaver.

For tråden i C ++ er en ID et objekt med datamedlemmer og medlemsfunksjoner. Dette ID -objektet har en tekstkode, som er det folk normalt anser som ID. ID -objektet bruker << 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.

Tråden er en klasse der ID -objektet er et datamedlem. ID -objektet kan oppnås med følgende syntaks:

Tråd :: get_id ()

Syntaksen “Tråd :: get_id ()” kan brukes når tråden ikke kjører, og også når tråden kjører, og den vil gi forskjellige objekter og tilsvarende tekstkoder for de to forskjellige situasjonene.

En måte å skaffe tråd -ID i trådkroppen mens den kjører er å bruke syntaks:

this_thread :: get_id ()

Alle tråder som kjører har forskjellige ID -objekter og tilsvarende tekstkoder. Alle tråder som ikke kjører har samme tilsvarende tekstkode for det samme programmet. Selv om de har samme tekstkode, har alle tråder som ikke kjører forskjellige ID -objekter fordi objekter er referanser og ikke pekere.

En tråd som kjører blir referert til som en tråd-av-utførelse.

For å kompilere et program med tråder, med G ++ -kompilatoren, bruk en kommando som ligner på:

G ++ -STD = C ++ 2A Temp.CPP -LPTHREAD -O TEMP

Denne artikkelen forklarer forskjellige måter å skaffe ID -er med forskjellige tråder i C ++, som begynner med et sammendrag av hva en tråd er.

Artikkelinnhold

  • Trådsammendrag
  • Oppnå tråd -ID
  • Bruk av denne_thread :: get_id ()
  • Konklusjon

Trådsammendrag

En tråd er en kabinett av en toppnivåfunksjon. En tråd blir instantiert fra trådklassen. Navnet på toppnivåfunksjonen er et argument for konstruktørfunksjonen til trådobjektet. Hoved () -funksjonen i C ++ er også en funksjon på toppnivå. Så hovedfunksjonen () oppfører seg som hovedtråden. Følgende program viser to tråder hvorav hoved- () -funksjonen er en:

#inkludere
#inkludere
ved hjelp av navneområdet STD;
tråd thr;
void moro ()
cout <<"This is line A." <cout <<"This is line B." <
int main ()

thr = tråd (morsom);
thr.bli med();
/ * uttalelser */
retur 0;

Utgangen er:

Dette er linje A.
Dette er linje B.

Toppnivåfunksjonene er morsomme () og Main (). Main () er som hovedtråden. Navnet på toppnivåfunksjonen, Fun () er argumentet for konstruktøren av tråden, THR, i hovedfunksjonen.

Programmet begynner med inkludering av iostream -biblioteket. Dette blir fulgt av inkludering av trådbiblioteket. Uttalelsen etter at det sikrer at ethvert navn som brukes i programmet er av standardnavnområdet med mindre annet er angitt.

Deretter er tråden THR erklært uten funksjonsanrop. Toppnivåfunksjonen, Fun () er deretter definert. Deretter er definisjonen av hoved- () -funksjonen. Den første uttalelsen i Main (), tildeler funksjonen, moro () til tråden, THR, i tillegg til å kalle funksjonen.

Den andre uttalelsen i Main () er sammenføyningserklæringen. Hvis denne uttalelsen er fraværende, kan hovedtråden løpe til fullføring uten tråden, og løper til sin egen fullføring. Med denne uttalelsen, på det punktet hvor uttalelsen er skrevet, stopper hovedtråden (funksjonen) (blokker), og lar den sammenføyede tråden (THR) utføre til fullføringen; Før hovedtråden fortsetter til sin egen fullføring. Et forsøk på å kompilere programmet uten at Join -uttalelsen skal ende opp med en feilmelding og ingen sammenstilling.

Når tråden er erklært med uttalelsen,

tråd thr;

Det er ikke en løpende tråd; Ingen funksjoner kjører. Når tråden, får THR imidlertid et funksjonsnavn som argument, som i,

thr = tråd (morsom);

det blir en løpende tråd. Denne uttalelsen er også en funksjonsanrop, for funksjonen, moro ().

Etter at Join -uttalelsen i hovedfunksjonen, tråden, har THR fullført utførelsen, og det er ikke lenger en løpende tråd. I den tilstanden er IDen forskjellig fra da den kjørte.

Oppnå tråd -ID

Følgende program viser den grunnleggende måten å skaffe tråd -ID når tråden ikke utføres, og også når den utfører:

#inkludere
#inkludere
ved hjelp av navneområdet STD;
tråd thr;
void moro ()
cout <<"This is line A." <Tråd :: id idr = thr.get_id ();
cout <cout <<"This is line B." <
int main ()

Tråd :: ID IDD = thr.get_id ();
cout <thr = tråd (morsom);
thr.bli med();
// cout </ * uttalelser */
retur 0;

Utgangen fra forfatterens datamaskin er:

Tråd :: ID for en ikke-utførende tråd
Dette er linje A.
140362842543872
Dette er linje B.

THR er en global variabel. Det brukes i funksjonen for tråden THR, i uttalelsen:

Tråd :: id idr = thr.get_id ();

Variabelen som holder trådobjektet som er oppnådd er IDR. Selv om ID er et instantiert objekt, er det også medlem av trådklassen. Så erklæringen om IDR må være:

Tråd :: ID IDR

med semikolonet. Neste uttalelse etter denne er:

cout <

Operatøren, <

Tråd :: ID IDD = thr.get_id ();

i hovedfunksjonen (). Det er det samme som den i trådens utføringsfunksjon, bortsett fra mottaksvariabelen, IDD. Denne uttalelsen blir utført før tråden, THR tildeles en funksjon. Tekst -ID (kode) for denne tråden som ikke utfører er:

Tråd :: ID for en ikke-utførende tråd

Under utførelsen av Main () -funksjonen har tråden Thr fullført sin egen utførelse etter at Join -uttalelsen. Og så, “Thr.get_id () ”skal kunne returnere IDen til tråden når den ikke utfører. Per nå har C ++ -programmet samlet med G ++ problemer med å skaffe ID for tråden som har kjørt til fullføring. Det er grunnen til at ID -uttalelsen etter at Join -erklæringen i koden ovenfor er kommentert.

Bruk av denne_thread :: get_id ()

“This_thread ::” er kodet innenfor utførelsens tråd (funksjon). Det representerer tråden som for øyeblikket kjører. Det kan følges av en funksjon for tråden, for eksempel get_id (), å ha

this_thread :: get_id ()

For å få den løpende trådens ID for tråden, som er forskjellig fra IDen når tråden ikke kjører.

“This_thread ::” brukes i en tråds funksjonskropp. Følgende program illustrerer dette for tråden, THR:

#inkludere
#inkludere
ved hjelp av navneområdet STD;
tråd thr;
void moro ()
cout <<"This is line A." <tråd :: id idr = this_thread :: get_id ();
cout <cout <<"This is line B." <
int main ()

Tråd :: ID IDD = thr.get_id ();
cout <thr = tråd (morsom);
thr.bli med();
retur 0;

Utgangen fra forfatterens datamaskin er:

Tråd :: ID for en ikke-utførende tråd
Dette er linje A.
140199206078208
Dette er linje B.

Merk at trådnavnet, THR, ikke ble brukt i trådfunksjonen, i dette tilfellet.

Konklusjon

Det er to former for tråd -ID i C++. IDen når tråden utfører er forskjellig fra IDen når tråden ikke utfører. En ID (for identifikator) er det som identifiserer noe. I C ++ er navnet på tråd -ID ID, i små bokstaver. Dette er et datamedlem i trådklassen. Det er ikke et grunnleggende objekt. Det er instantiert fra sin egen klasse, av navneområdet, tråd :: ID. Selv om IDen er et objekt, har den et tilsvarende tekstskjema. Tekstskjemaet kan settes inn i cout -objektet (terminalen) med C ++ innsettingsoperatøren, <<.

Hver tråd har to forskjellige ID -er: en når tråden kjører; og den andre når tråden ikke kjører. Når tråden ikke kjører, er tekstformen for ID -en forskjellig fra tekstformen når tråden kjører for samme tråd.

C ++ -spesifikasjonen har forskjellige måter å få tråd -ID. Imidlertid, med nå, med G ++ -kompilatoren, er de eneste måtene å få ID -en fra uttrykkene: “ThreadObject.get_id () ”og“ this_thread :: get_id () ”. “This_thread :: get_id ()” brukes innenfor den utførende trådens funksjonskropp, der "this_thread ::" refererer til tråden som for øyeblikket kjører. En løpende tråd blir referert til som en tråd for utførelse.