Observação
O acesso a essa página exige autorização. Você pode tentar entrar ou alterar diretórios.
O acesso a essa página exige autorização. Você pode tentar alterar os diretórios.
Classe
Define um objeto que é usado para observar e gerenciar um thread de execução em um aplicativo.
Sintaxe
class thread;
Comentários
É possível usar um objeto thread para observar e gerenciar um thread de execução em um aplicativo. Um objeto thread criado usando o construtor padrão não é associado a qualquer thread de execução. Um objeto thread construído usando um objeto resgatável cria um novo thread de execução e chama o objeto resgatável nesse thread. Objetos Thread 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 membro thread::get_id retorna o identificador do thread 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 é igual para todos os objetos thread construídos por padrão e diferente do valor retornado por this_thread::get_id para qualquer thread de execução que poderia ser unido no momento da chamada.
Membros
Classes públicas
| Nome | Descrição |
|---|---|
id |
Identifica exclusivamente o thread associado. |
Construtores públicos
| Nome | Descrição |
|---|---|
thread |
Constrói um objeto thread. |
Métodos públicos
| Nome | Descrição |
|---|---|
detach |
Desanexa o thread associado do objeto thread. |
get_id |
Retorna o identificador exclusivo do thread associado. |
hardware_concurrency |
Estático. 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 permite junções. |
native_handle |
Retorna o tipo específico à implementação que representa o identificador de thread. |
swap |
Troca o estado do objeto por um objeto thread especificado. |
Operadores públicos
| Nome | Descrição |
|---|---|
thread::operator= |
Associa um thread ao objeto thread atual. |
Requisitos
Cabeçalho: <thread>
Namespace: std
detach
Desanexa o thread associado. O sistema operacional fica responsável por liberar recursos de thread após o encerramento.
void detach();
Comentários
Após uma chamada para detach, as chamadas subsequentes para get_id retornamid.
Se o thread associado ao objeto de chamada não puder ingressar, a função gerará um system_error código de erro .invalid_argument
Se o thread associado ao objeto de chamada for inválido, a função lançará um system_error código de erro .no_such_process
get_id
Retorna um identificador exclusivo para o thread associado.
id get_id() const noexcept;
Valor retornado
Um id objeto 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 retornado
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ífica 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 o multithreading simultâneo em cada núcleo individual.
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 em execução simultânea 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 no sistema e em vários grupos em computadores com mais de 64 processadores. O limite do número de threads simultâneos agora é o número total de processadores lógicos no sistema.
Classe id
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 é comparado como igual ao objeto thread::id em qualquer thread existente.
Todos os objetos thread::id construídos por padrão são comparados como iguais.
join
Bloqueia até que o thread de execução associado ao objeto de chamada seja concluído.
void join();
Comentários
Se a chamada tiver êxito, as chamadas subsequentes a get_id do objeto de chamada retornarão um thread::id padrão que não é comparado como igual ao thread::id de qualquer thread existente; se a chamada não tiver êxito, o valor retornado por get_id ficará inalterado.
joinable
Especifica se o thread associado permite junções.
bool joinable() const noexcept;
Valor retornado
true se o thread associado permitir junções; caso contrário, false.
Comentários
Um objeto thread pode ser ingressado se get_id() != id().
native_handle
Retorna o tipo específico à implementação que representa o identificador de thread. O identificador de thread pode ser usado de maneiras específicas à implementação.
native_handle_type native_handle();
Valor retornado
native_handle_type é definido como uma conversão Win32 HANDLE 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 retornado
*this
Comentários
As chamadas de método serão desanexadas se o objeto de chamada permitir junções.
Depois que a associação é feita, Other é definido com um estado construído por padrão.
swap
Troca o estado do objeto pelo estado de um objeto thread especificado.
void swap(thread& Other) noexcept;
Parâmetros
Other
Um objeto thread.
Construtor thread
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 a ser executada no thread.
A
Uma lista de argumentos a ser passada para F.
Other
Um objeto thread existente.
Comentários
O primeiro construtor constrói um objeto que não está associado a nenhum thread de execução. O valor retornado por get_id para o objeto construído é thread::id().
O segundo construtor constrói um objeto associado a um novo thread de execução. Ele 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 gerará um objeto system_error que tem um código de erro resource_unavailable_try_again. Se a chamada para F terminar com uma exceção não capturada, terminate será chamado. 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 que está associado ao thread associado a Other.
Other é então definido com um estado construído por padrão.