Compartir a través de


Clase thread

Define un objeto que se utiliza para observar y administrar un subproceso de ejecución dentro de una aplicación.

Sintaxis

class thread;

Comentarios

Se puede utilizar un objeto thread para observar y administrar un subproceso de ejecución dentro de una aplicación. Un objeto thread creado con el constructor predeterminado no está asociado a ningún subproceso de ejecución. Un objeto thread construido mediante un objeto al que se puede llamar crea un nuevo subproceso de ejecución y llama al objeto al que se puede llamar en ese thread. Los objetos Thread se pueden mover, pero no copiar, por lo que un subproceso de ejecución se puede asociar solo a un objeto thread.

Cada subproceso de ejecución tiene un identificador único de tipo thread::id. La función this_thread::get_id devuelve el identificador del subproceso que realiza la llamada. La función miembro thread::get_id devuelve el identificador del subproceso administrado por un objeto thread. Para un objeto thread creado con el constructor predeterminado, el método thread::get_id devuelve un objeto cuyo valor es el mismo para todos los objetos thread creados con el constructor predeterminado y diferente del valor devuelto por this_thread::get_id para cualquier subproceso de ejecución que se pueda combinar en el momento de la llamada.

Miembros

Clases públicas

Nombre Descripción
id Identifica de forma única el subproceso asociado.

Constructores públicos

Nombre Descripción
thread Construye un objeto thread.

Métodos públicos

Nombre Descripción
detach Desasocia el subproceso asociado del objeto thread.
get_id Devuelve el identificador único del subproceso asociado.
hardware_concurrency Estática. Devuelve una estimación del número de contextos de subprocesos de hardware.
join Se bloquea hasta que el subproceso asociado se completa.
joinable Especifica si se puede unir el subproceso asociado.
native_handle Devuelve el tipo específico de la implementación que representa el identificador de subproceso.
swap Intercambia el estado de objeto con un objeto thread especificado.

Operadores públicos

Nombre Descripción
thread::operator= Asocia un subproceso al objeto thread actual.

Requisitos

Encabezado: <thread>

Espacio de nombres: std

detach

Desasocia el subproceso asociado. El sistema operativo pasa a ser responsable de liberar los recursos de subproceso al finalizar.

void detach();

Comentarios

Después de llamar a detach, las siguientes llamadas a get_id devuelven id.

Si el subproceso asociado al objeto que llama no se puede combinar, la función produce un system_error que tiene un código de error de invalid_argument.

Si el subproceso asociado al objeto que realiza la llamada no es válido, la función produce un system_error que tiene un código de error de no_such_process.

get_id

Devuelve un identificador único para el subproceso asociado.

id get_id() const noexcept;

Valor devuelto

Objeto id que identifica de forma única el subproceso asociado o id() si no hay ningún subproceso asociado al objeto .

hardware_concurrency

Un método estático que devuelve una estimación del número de contextos de subprocesos de hardware.

static unsigned int hardware_concurrency() noexcept;

Valor devuelto

Una estimación del número de contextos de subprocesos de hardware. Si el valor no se puede procesar o no está bien definido, este método devuelve 0.

Específico de Microsoft

hardware_concurrency devuelve el número de procesadores lógicos, que corresponde al número de subprocesos de hardware que se pueden ejecutar simultáneamente. Tiene en cuenta el número de procesadores físicos, el número de núcleos de cada procesador físico y el multithreading simultáneo en cada núcleo único.

Antes de Windows 11 y Windows Server 2022, las aplicaciones estaban limitadas de forma predeterminada a un único grupo de procesadores, teniendo como máximo 64 procesadores lógicos. Esto limita el número de subprocesos que se ejecutan simultáneamente a 64. Para obtener más información, consulte Grupos de procesadores.

A partir de Windows 11 y Windows Server 2022, los procesos y sus subprocesos tienen afinidades de procesador que, de forma predeterminada, abarcan todos los procesadores del sistema y en varios grupos de máquinas con más de 64 procesadores. El límite del número de subprocesos simultáneos es ahora el número total de procesadores lógicos del sistema.

Clase id

Proporciona un identificador único para cada subproceso de ejecución en el proceso.

class thread::id {
    id() noexcept;
};

Comentarios

El constructor predeterminado crea un objeto que no se compara como igual al objeto thread::id de cualquier subproceso existente.

Todos los objetos thread::id construidos de forma predeterminada son iguales.

join

Bloquea hasta que se complete el subproceso de ejecución asociado al objeto que realiza la llamada.

void join();

Comentarios

Si la llamada se realiza correctamente, las llamadas siguientes a get_id para el objeto que realiza la llamada devuelven un thread::id predeterminado que no se compara como igual al thread::id de cualquier subproceso existente. Si la llamada no se realiza correctamente, el valor devuelto por get_id no cambia.

joinable

Especifica si se puede unir el subproceso asociado.

bool joinable() const noexcept;

Valor devuelto

true si se puede combinar el subproceso asociado. De lo contrario, false.

Comentarios

Un objeto de subproceso se puede combinar si get_id() != id().

native_handle

Devuelve el tipo específico de la implementación que representa el identificador de subproceso. El identificador de subproceso puede usarse en aspectos específicos de la implementación.

native_handle_type native_handle();

Valor devuelto

native_handle_type se define como una conversión win32 HANDLE como void *.

thread::operator=

El subproceso de un objeto especificado se asocia con el objeto actual.

thread& operator=(thread&& Other) noexcept;

Parámetros

Other
Un objeto thread.

Valor devuelto

*this

Comentarios

Las llamadas de método se separan si el objeto que realiza la llamada se puede unir.

Una vez realizada la asociación, Other se establece en un estado construido de forma predeterminada.

swap

Intercambia el estado de objeto con el de un objeto thread especificado.

void swap(thread& Other) noexcept;

Parámetros

Other
Un objeto thread.

Constructor thread

Construye un objeto thread.

thread() noexcept;
template <class Fn, class... Args>
explicit thread(Fn&& F, Args&&... A);

thread(thread&& Other) noexcept;

Parámetros

F
Función definida por la aplicación que se va a ejecutar en el subproceso.

A
Una lista de argumentos que se van a pasar a F.

Other
Objeto thread existente.

Comentarios

El primer constructor crea un objeto que no está asociado con un subproceso de ejecución. El valor devuelto por get_id para el objeto construido es thread::id().

El segundo constructor construye un objeto asociado a un nuevo subproceso de ejecución. Ejecuta la pseudofunción INVOKE definida en <functional>. Si no hay suficientes recursos disponibles para iniciar un nuevo subproceso, la función produce un objeto system_error que tiene un código de error resource_unavailable_try_again. Si la llamada a F finaliza con una excepción no detectada, se llama a terminate.

El tercer constructor crea un objeto que está asociado con el subproceso que está asociado a Other. Después, Other se establece en un estado construido de forma predeterminada.

Consulte también

Referencia de archivos de encabezado
<thread>