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.