¿Cómo obtengo el ID de subproceso en c?++?

¿Cómo obtengo el ID de subproceso en c?++?
Antes de saber cómo obtener la identificación de hilo de un hilo, primero debe conocer las dos formas de la identificación del hilo en c++. Esto corresponde a saber qué identificación se obtiene cuando el hilo no se está ejecutando y qué ID se obtiene cuando el hilo se está ejecutando. Ejecutar significa ejecutar. Una identificación (para identificador) es lo que identifica algo. En C ++, el nombre del ID de subproceso es ID, en minúsculas.

Para el hilo en C ++, una identificación es un objeto con miembros de datos y funciones de miembros. Este objeto de identificación tiene un código de texto, que es lo que la gente normalmente considera como la identificación. El objeto de identificación usa el << 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.

El hilo es una clase en la que el objeto ID es un miembro de datos. El objeto ID se puede obtener con la siguiente sintaxis:

Thread :: get_id ()

La sintaxis "hilo :: get_id ()" se puede usar cuando el hilo no se está ejecutando y también cuando el hilo se está ejecutando, y dará diferentes objetos y códigos de texto correspondientes para las dos situaciones diferentes.

Una forma de obtener el ID de subprocesos dentro del cuerpo del rosco mientras se ejecuta es usar la sintaxis:

this_thread :: get_id ()

Todos los hilos que se ejecutan tienen diferentes objetos de identificación y códigos de texto correspondientes. Todos los hilos que no se están ejecutando tienen el mismo código de texto correspondiente para el mismo programa. Aunque tienen el mismo código de texto, todos los hilos que no se están ejecutando tienen objetos de identificación diferentes porque los objetos son referencias y no punteros.

Un hilo que se está ejecutando se conoce como un hilo de ejecución.

Para compilar un programa de hilos, con el compilador G ++, use un comando similar a:

g ++ -std = C ++ 2a temperatura.CPP -LPTHREAD -O TEMP

Este artículo explica diferentes formas de obtener ID de diferentes hilos en C ++, comenzando con un resumen de lo que es un hilo.

Contenido del artículo

  • Resumen de hilo
  • Obtención de ID de hilo
  • Uso de this_thread :: get_id ()
  • Conclusión

Resumen de hilo

Un hilo es un recinto de una función de nivel superior. Se instancia un hilo de la clase de hilo. El nombre de la función de nivel superior es un argumento para la función de constructor del objeto de subproceso. La función Main () en C ++ también es una función de nivel superior. Entonces la función principal () se comporta como el hilo principal. El siguiente programa muestra dos hilos de los cuales la función principal () es una:

#incluir
#incluir
usando el espacio de nombres STD;
hilo thr;
Void Fun ()
cout <<"This is line A." <cout <<"This is line B." <
int main ()

thr = hilo (diversión);
thr.unirse();
/* declaraciones */
regresar 0;

La salida es:

Esta es una línea una.
Esta es la línea B.

Las funciones de nivel superior son divertidas () y main (). Main () es como el hilo principal. El nombre de la función de nivel superior, Fun () es el argumento para el constructor del hilo, thr, en la función principal.

El programa comienza con la inclusión de la biblioteca iostream. Esto es seguido por la inclusión de la biblioteca de hilos. La declaración después de eso asegura que cualquier nombre utilizado en el programa sea del espacio de nombres estándar a menos que se indique lo contrario.

A continuación, el hilo THR se declara sin una llamada de función. La función de nivel superior, Fun () se define luego. A partir de entonces es la definición de la función principal (). La primera declaración en main (), asigna la función, divertir () al hilo, thr, así como llamar a la función.

La segunda declaración en main () es la declaración de unión. Si esta declaración está ausente, el hilo principal puede ejecutarse hasta su finalización sin el hilo, THR corriendo a su propia finalización. Con esta declaración, en el punto donde se escribe la declaración, el hilo principal (función) se detiene (bloques) y permite que el hilo unido (THR) se ejecute a su finalización; Antes de que el hilo principal continúe hasta su propia finalización. Un intento de compilar el programa sin la declaración de unión debe terminar con un mensaje de error y sin compilación.

Cuando el hilo se declara con la declaración,

hilo thr;

No es un hilo en ejecución; Ninguna función se está ejecutando. Sin embargo, cuando el hilo, THR recibe un nombre de función como argumento, como en,

thr = hilo (diversión);

se convierte en un hilo en ejecución. Esta declaración también es una llamada de función, para la función, diversión ().

Después de la declaración de unión en la función principal, el hilo, THR ha completado su ejecución, y ya no es un hilo en ejecución. En ese estado, su identificación es diferente de cuando se estaba ejecutando.

Obtención de ID de hilo

El siguiente programa muestra la forma básica de obtener el ID de subproceso cuando el hilo no se está ejecutando y también cuando se está ejecutando:

#incluir
#incluir
usando el espacio de nombres STD;
hilo 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 = hilo (diversión);
thr.unirse();
// cout </* declaraciones */
regresar 0;

La salida de la computadora del autor es:

hilo :: id de un hilo no ejecutivo
Esta es una línea una.
140362842543872
Esta es la línea B.

THR es una variable global. Se usa dentro del cuerpo de función del hilo THR, en la declaración:

Thread :: ID IDR = THR.get_id ();

La variable que contiene el objeto de subproceso obtenido es IDR. Aunque ID es un objeto instanciado, también es un miembro de la clase de hilo. Entonces la declaración de IDR tiene que ser:

Thread :: ID IDR

con el punto y coma. La siguiente declaración después de esta es:

cout <

El operador, <

Thread :: ID IDD = THR.get_id ();

En la función principal (). Es lo mismo que el de la función de ejecución de subprocesos, excepto la variable receptora, IDD. Esta declaración se ejecuta antes del hilo, THR se asigna una función. El ID de texto (código) para este hilo que no se está ejecutando es:

hilo :: id de un hilo no ejecutivo

Durante la ejecución de la función main (), el hilo Thr ha terminado su propia ejecución después de la declaración de unión. Y así, "thr.get_id () "debería poder devolver la ID del hilo cuando no se está ejecutando. A partir de ahora, el programa C ++ compilado con G ++ tiene dificultades para obtener la ID del hilo que se ha ejecutado hasta su finalización. Es por eso que se comenta la declaración de identificación después de la declaración de unión en el código anterior.

Uso de this_thread :: get_id ()

"This_thread ::" está codificado dentro del hilo de ejecución (función). Representa el hilo que se está ejecutando actualmente. Puede ser seguido por una función para el hilo, como get_id (), para tener

this_thread :: get_id ()

Para obtener la ID del hilo del hilo en ejecución, que es diferente de la ID cuando el hilo no se está ejecutando.

"This_thread ::" se usa dentro del cuerpo de funciones de un hilo. El siguiente programa ilustra esto para el hilo, thr:

#incluir
#incluir
usando el espacio de nombres STD;
hilo 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 = hilo (diversión);
thr.unirse();
regresar 0;

La salida de la computadora del autor es:

hilo :: id de un hilo no ejecutivo
Esta es una línea una.
140199206078208
Esta es la línea B.

Tenga en cuenta que el nombre del hilo, THR, no se usó dentro del cuerpo de la función de subproceso, en este caso.

Conclusión

Hay dos formas de la identificación del hilo en c++. La ID cuando el hilo se está ejecutando es diferente de la ID cuando el hilo no se está ejecutando. Una identificación (para identificador) es lo que identifica algo. En C ++, el nombre del ID de subproceso es ID, en minúsculas. Este es un miembro de datos en la clase de hilo. No es un objeto fundamental. Se instancia desde su propia clase, del espacio de nombres, Thread :: Id. Aunque la identificación es un objeto, tiene un formulario de texto correspondiente. El formulario de texto se puede insertar en el objeto Cout (terminal) con el operador de inserción C ++, <<.

Cada hilo tiene dos ID diferentes: uno cuando el hilo se está ejecutando; y el otro cuando el hilo no se está ejecutando. Cuando el hilo no se está ejecutando, el formulario de texto para la identificación es diferente del formulario de texto cuando el hilo se está ejecutando para el mismo hilo.

La especificación de C ++ tiene varias formas de obtener el ID de subproceso. Sin embargo, a partir de ahora, con el compilador G ++, las únicas formas de obtener la identificación son de las expresiones: “TreadObject.get_id () "y" this_thread :: get_id () ". "This_thread :: get_id ()" se usa dentro del cuerpo de funciones del hilo ejecutivo, donde "this_thread ::" se refiere al hilo que se ejecuta actualmente. Se conoce un hilo en ejecución como un hilo de ejecución.