Como faço para obter ID do thread em c++?

Como faço para obter ID do thread em c++?
Antes de saber como obter o ID do tópico de um tópico, você deve primeiro saber as duas formas do ID do thread em c++. Isso corresponde a saber qual ID é obtido quando o thread não está em execução e qual ID é obtido quando o tópico está sendo executado. Correr significa executar. Um ID (para identificador) é o que identifica algo. Em C ++, o nome do ID do thread é ID, em minúsculas.

Para o thread em C ++, um ID é um objeto com membros de dados e funções membros. Este objeto de identificação tem um código de texto, que é o que as pessoas normalmente consideram como o ID. O objeto de identificação usa o << 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.

O tópico é uma classe em que o objeto de identificação é um membro de dados. O objeto de identificação pode ser obtido com a seguinte sintaxe:

Thread :: get_id ()

A sintaxe “Thread :: get_id ()” pode ser usada quando o thread não estiver em execução e também quando o thread estiver em execução, e fornecerá objetos diferentes e códigos de texto correspondentes para as duas situações diferentes.

Uma maneira de obter o ID do thread dentro do corpo da linha enquanto estiver em execução é usar a sintaxe:

this_thread :: get_id ()

Todos os tópicos que estão em execução têm objetos de identificação diferentes e códigos de texto correspondentes. Todos os tópicos que não estão em execução têm o mesmo código de texto correspondente para o mesmo programa. Embora tenham o mesmo código de texto, todos os threads que não estão em execução têm objetos de identificação diferentes porque objetos são referências e não ponteiros.

Um tópico que está em execução é referido como um tópico de execução.

Para compilar um programa de threads, com o compilador G ++, use um comando semelhante a:

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

Este artigo explica diferentes maneiras de obter identificações de diferentes threads em C ++, começando com um resumo do que é um thread.

Conteúdo do artigo

  • Resumo do tópico
  • Obtendo ID do thread
  • Uso de this_thread :: get_id ()
  • Conclusão

Resumo do tópico

Um fio é um recinto de uma função de nível superior. Um tópico é instanciado da classe Thread. O nome da função de nível superior é um argumento para a função construtora do objeto Thread. A função principal () em C ++ também é uma função de nível superior. Então a função principal () se comporta como o tópico principal. O programa a seguir mostra dois tópicos dos quais a função principal () é uma:

#incluir
#incluir
usando namespace std;
thread thr;
Void Fun ()
cout <<"This is line A." <cout <<"This is line B." <
int main ()

thr = thread (diversão);
Thr.juntar();
/* declarações */
retornar 0;

A saída é:

Esta é a linha A.
Esta é a linha B.

As funções de nível superior são divertidas () e Main (). main () é como o tópico principal. O nome da função de nível superior, FUN () é o argumento para o construtor do thread, Thr, na função principal.

O programa começa com a inclusão da biblioteca iostream. Isto é seguido pela inclusão da biblioteca de threads. A declaração depois disso garante que qualquer nome usado no programa seja do espaço de nome padrão, a menos que indicado de outra forma.

Em seguida, o thread Thr é declarado sem uma chamada de função. A função de nível superior, Fun () é então definida. Posteriormente, é a definição da função principal (). A primeira declaração em main () atribui a função, divertida () ao thread, thr, além de chamar a função.

A segunda declaração em Main () é a declaração de junção. Se esta declaração estiver ausente, o encadeamento principal poderá ser concluído sem o tópico, THR funcionando até sua própria conclusão. Com esta afirmação, no ponto em que a instrução é digitada, o encadeamento principal (função) é interrompido (blocos) e permite que o encadeamento unido (thr) seja executado em sua conclusão; Antes que o tópico principal continue até sua própria conclusão. Uma tentativa de compilar o programa sem a declaração de junção deve acabar com uma mensagem de erro e sem compilação.

Quando o tópico é declarado com a declaração,

thread thr;

não é um tópico em execução; Nenhuma função está funcionando. No entanto, quando o tópico, Thr recebe um nome de função como argumento, como em,

thr = thread (diversão);

Torna -se um tópico em execução. Esta afirmação também é uma chamada de função, para a função, Fun ().

Após a declaração de junção na função principal, o tópico, THR concluiu sua execução e não é mais um tópico em execução. Nesse estado, seu ID é diferente de quando estava funcionando.

Obtendo ID do thread

O programa a seguir mostra a maneira básica de obter o ID do thread quando o thread não está executando e também quando está executando:

#incluir
#incluir
usando namespace std;
thread 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 (diversão);
Thr.juntar();
// cout </* declarações */
retornar 0;

A saída do computador do autor é:

Tópico :: ID de um tópico não executado
Esta é a linha A.
140362842543872
Esta é a linha B.

THR é uma variável global. É usado dentro do corpo da função do fio Thr, na declaração:

thread :: id iDr = thr.get_id ();

A variável que segura o objeto de rosca obtida é IDR. Embora o ID seja um objeto instanciado, também é um membro da classe de threads. Portanto, a declaração de IDR deve ser:

thread :: id IDR

com o semicolon. A próxima declaração depois deste é:

cout <

O operador, <

thread :: id idd = thr.get_id ();

na função main (). É o mesmo que o da função de execução do thread, exceto a variável de recebimento, idd. Esta declaração é executada antes do tópico, THR recebe uma função. O ID de texto (código) deste thread que não está executando é:

Tópico :: ID de um tópico não executado

Durante a execução da função principal (), o thread THR terminou sua própria execução após a declaração de junção. E assim, “thr.get_id () ”deve ser capaz de retornar o ID do tópico quando não estiver executando. A partir de agora, o programa C ++ compilado com G ++ tem dificuldade em obter o ID do thread que foi executado para a conclusão. É por isso que a declaração de identificação após a declaração de junção no código acima é comentada.

Uso de this_thread :: get_id ()

"This_thread ::" está codificado dentro do encadeamento da execução (função). Representa o tópico que está em execução atualmente. Pode ser seguido por uma função para o thread, como get_id (), para ter

this_thread :: get_id ()

Para obter o ID do tópico em execução, o que é diferente do ID quando o thread não está em execução.

"This_thread ::" é usado no corpo da função de um thread. O programa a seguir ilustra isso para o tópico, THR:

#incluir
#incluir
usando namespace std;
thread 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 (diversão);
Thr.juntar();
retornar 0;

A saída do computador do autor é:

Tópico :: ID de um tópico não executado
Esta é a linha A.
140199206078208
Esta é a linha B.

Observe que o nome do tópico, THR, não foi usado no corpo da função do thread, neste caso.

Conclusão

Existem duas formas do ID do thread em c++. O ID quando o fio está executando é diferente do ID quando o tópico não está executando. Um ID (para identificador) é o que identifica algo. Em C ++, o nome do ID do thread é ID, em minúsculas. Este é um membro de dados na classe Thread. Não é um objeto fundamental. É instanciado de sua própria classe, do espaço para nome, thread :: id. Embora o ID seja um objeto, ele tem um formulário de texto correspondente. O formulário de texto pode ser inserido no objeto Cout (terminal) com o operador de inserção C ++, <<.

Cada encadeamento possui dois IDs diferentes: um quando o thread está em execução; e o outro quando o tópico não está funcionando. Quando o thread não está em execução, o formulário de texto para o ID é diferente do formulário de texto quando o thread está funcionando para o mesmo thread.

A especificação C ++ tem várias maneiras de obter o ID do thread. No entanto, a partir de agora, com o compilador G ++, as únicas maneiras de obter o ID são das expressões: “ThreadObject.get_id () ”e“ this_thread :: get_id () ”. "This_thread :: get_id ()" é usado no corpo da função do thread de execução, onde "this_thread ::" se refere ao tópico atualmente em execução. Um fio em execução é referido como um tópico de execução.