Partilhar via


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>