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.