Compartir vía


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 que está asociado al objeto de llamada no es válido, la función produce un system_error que tiene un código de error de invalid_argument.

Si el subproceso que está asociado con el objeto de 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

Un objeto id que identifica de forma única el subproceso asociado, o id() si ningún subproceso está 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íficos de Microsoft

hardware_concurrency se define actualmente para devolver 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.

Sin embargo, en sistemas con más de 64 procesadores lógicos, este número está limitado por el número de procesadores lógicos en un único grupo; consulte Grupos de procesadores.

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

Se bloquea hasta que finaliza el subproceso de ejecución que está asociado con el objeto de 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 un HANDLE de Win32 que se convierte en 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
Una función definida por la aplicación que va a ejecutar 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 una llamada a get_id para el objeto construido es thread::id().

El segundo constructor construye un objeto que está asociado a un nuevo subproceso de ejecución y ejecuta la pseudofunción INVOKE que se define 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>