thread
Classe
Define um objeto que é usado para observar e gerenciar um thread de execução dentro de um aplicativo.
Sintaxe
class thread;
Comentários
Você pode usar um objeto thread
para observar e gerenciar um thread de execução dentro de um aplicativo. Um objeto thread
criado usando o construtor padrão não está associado a nenhum thread de execução. Um objeto thread
que é construído usando um objeto chamável cria um novo thread de execução e chama o objeto chamável nesse thread
.
Thread
objetos podem ser movidos, mas não copiados, e é por isso que um thread de execução pode ser associado a apenas um objeto thread
.
Cada thread de execução tem um identificador exclusivo do tipo thread::id
. A função this_thread::get_id
retorna o identificador do thread de chamada. A função de membro thread::get_id
retorna o identificador do thread que é gerenciado por um objeto thread
. Para um objeto thread
construído por padrão, o método thread::get_id
retorna um objeto que tem um valor que é o mesmo para todos os objetos de thread
construídos por padrão e diferente do valor retornado por this_thread::get_id
para qualquer thread de execução que possa ser unido no momento da chamada.
Membros
Aulas Públicas
Designação | Descrição |
---|---|
id |
Identifica exclusivamente o thread associado. |
Construtores Públicos
Designação | Descrição |
---|---|
thread |
Constrói um objeto thread . |
Métodos Públicos
Designação | Descrição |
---|---|
detach |
Desanexa o thread associado do objeto thread . |
get_id |
Retorna o identificador exclusivo do thread associado. |
hardware_concurrency |
Estática. Retorna uma estimativa do número de contextos de thread de hardware. |
join |
Bloqueia até que o thread associado seja concluído. |
joinable |
Especifica se o thread associado é joinable. |
native_handle |
Retorna o tipo específico de implementação que representa o identificador de thread. |
swap |
Troca o estado do objeto por um objeto thread especificado. |
Operadores Públicos
Designação | Descrição |
---|---|
thread::operator= |
Associa um thread ao objeto thread atual. |
Requerimentos
Cabeçalho:<thread>
Namespace:std
detach
Desanexa o thread associado. O sistema operacional torna-se responsável por liberar recursos de thread no encerramento.
void detach();
Comentários
Após uma chamada para detach
, as chamadas subsequentes para get_id
retornam id
.
Se o thread associado ao objeto chamador não puder ser associado, a função lançará um system_error
que tem um código de erro de invalid_argument
.
Se o thread associado ao objeto chamador for inválido, a função lançará um system_error
que tem um código de erro de no_such_process
.
get_id
Retorna um identificador exclusivo para o thread associado.
id get_id() const noexcept;
Valor de retorno
Um objeto id
que identifica exclusivamente o thread associado ou id()
se nenhum thread estiver associado ao objeto.
hardware_concurrency
Método estático que retorna uma estimativa do número de contextos de thread de hardware.
static unsigned int hardware_concurrency() noexcept;
Valor de retorno
Uma estimativa do número de contextos de thread de hardware. Se o valor não puder ser calculado ou não estiver bem definido, esse método retornará 0.
específicos da Microsoft
hardware_concurrency
retorna o número de processadores lógicos, que corresponde ao número de threads de hardware que podem ser executados simultaneamente. Ele leva em conta o número de processadores físicos, o número de núcleos em cada processador físico e multithreading simultâneo em cada núcleo.
Antes do Windows 11 e do Windows Server 2022, os aplicativos eram limitados por padrão a um único grupo de processadores, tendo no máximo 64 processadores lógicos. Isso limitou o número de threads executados simultaneamente a 64. Para obter mais informações, consulte Grupos de processadores.
A partir do Windows 11 e do Windows Server 2022, os processos e seus threads têm afinidades de processador que, por padrão, abrangem todos os processadores do sistema e em vários grupos em máquinas com mais de 64 processadores. O limite no número de threads simultâneos é agora o número total de processadores lógicos no sistema.
id
classe
Fornece um identificador exclusivo para cada thread de execução no processo.
class thread::id {
id() noexcept;
};
Comentários
O construtor padrão cria um objeto que não se compara igual ao objeto thread::id
para qualquer thread existente.
Todos os objetos thread::id
construídos por padrão são iguais.
join
Bloqueia até que o thread de execução associado ao objeto chamador seja concluído.
void join();
Comentários
Se a chamada for bem-sucedida, as chamadas subsequentes para get_id
para o objeto chamador retornarão um thread::id
padrão que não se compara igual ao thread::id
de qualquer thread existente; Se a chamada não for bem-sucedida, o valor retornado por get_id
não será alterado.
joinable
Especifica se o thread associado é joinable.
bool joinable() const noexcept;
Valor de retorno
true
se o thread associado for joinable; caso contrário, false
.
Comentários
Um objeto thread pode ser unido se get_id() != id()
.
native_handle
Retorna o tipo específico de implementação que representa o identificador de thread. O identificador de thread pode ser usado de maneiras específicas de implementação.
native_handle_type native_handle();
Valor de retorno
native_handle_type
é definido como um Win32 HANDLE
convertido como void *
.
thread::operator=
Associa o thread de um objeto especificado ao objeto atual.
thread& operator=(thread&& Other) noexcept;
Parâmetros
Other
Um objeto thread
.
Valor de retorno
*this
Comentários
O método chama desanexar se o objeto chamador for joinable.
Depois que a associação é feita, Other
é definido como um estado construído por padrão.
swap
Troca o estado do objeto pelo de um objeto thread
especificado.
void swap(thread& Other) noexcept;
Parâmetros
Other
Um objeto thread
.
thread
construtor
Constrói um objeto thread
.
thread() noexcept;
template <class Fn, class... Args>
explicit thread(Fn&& F, Args&&... A);
thread(thread&& Other) noexcept;
Parâmetros
F
Uma função definida pelo aplicativo para executar no thread.
A
Uma lista de argumentos a serem passados para F
.
Other
Um objeto thread
existente.
Comentários
O primeiro construtor constrói um objeto que não está associado a um thread de execução. O valor retornado por get_id
para o objeto construído é thread::id()
.
O segundo construtor constrói um objeto que está associado a um novo thread de execução. Executa a pseudo-função INVOKE
definida em <functional>
. Se não houver recursos suficientes disponíveis para iniciar um novo thread, a função lançará um objeto system_error
que tenha um código de erro de resource_unavailable_try_again
. Se a chamada para F
terminar com uma exceção não detetada, terminate
será chamada. A chamada para F
não deve fazer com que o thread saia prematuramente, como chamando ExitThread
ou _endthreadex
.
O terceiro construtor constrói um objeto associado ao thread associado a Other
.
Other
é então definido como um estado construído por padrão.
Ver também
de referência de arquivos de cabeçalho
<thread>