Compartilhar via


Classe packaged_task

Descreve um provedor assíncrono que é um wrapper de chamada e cuja assinatura de chamada é Ty(ArgTypes...). O estado assíncrono associado mantém uma cópia de seu objeto que pode ser chamado, bem como o possível resultado.

Sintaxe

template <class>
class packaged_task;

Membros

Construtores públicos

Nome Descrição
packaged_task Constrói um objeto packaged_task.
Destruidor packaged_task::~packaged_task Destrói um objeto packaged_task.

Métodos públicos

Nome Descrição
get_future Retorna um objeto future que tem o mesmo estado assíncrono associado.
make_ready_at_thread_exit Chama o objeto callable que é armazenado no estado assíncrono associado e armazena atomicamente o valor retornado.
reset Substitui o estado assíncrono associado.
troca Troca o estado assíncrono associado por um objeto especificado.
valid Especifica se o objeto tem um estado assíncrono associado.

Operadores públicos

Nome Descrição
packaged_task::operator= Transfere o estado assíncrono associado de um objeto especificado.
packaged_task::operator() Chama o objeto callable que é armazenado no estado assíncrono associado, armazena atomicamente o valor retornado e define o estado como ready.
packaged_task::operator bool Especifica se o objeto tem um estado assíncrono associado.

Requisitos

Cabeçalho:<future>

Namespace: std

packaged_task::get_future

Retorna um objeto do tipo future<Ty> que tem o mesmo estado assíncrono associado.

future<Ty> get_future();

Comentários

Se o objeto packaged_task não tiver nenhum estado assíncrono associado, esse método gerará um future_error com código de erro no_state.

Se esse método já foi chamado para um objeto packaged_task que tem o mesmo estado assíncrono associado, o método gerará um future_error com código de erro future_already_retrieved.

packaged_task::make_ready_at_thread_exit

Chama o objeto callable que é armazenado no estado assíncrono associado e armazena atomicamente o valor retornado.

void make_ready_at_thread_exit(ArgTypes... args);

Comentários

Se o objeto packaged_task não tiver nenhum estado assíncrono associado, esse método gerará um future_error com código de erro no_state.

Se este método ou make_ready_at_thread_exit já tiver sido chamado para um objeto packaged_task que tem o mesmo estado assíncrono associado, esse método gera um future_error com código de erro promise_already_satisfied.

Caso contrário, este operador chama INVOKE(fn, args..., Ty), em que fn é o objeto callable que é armazenado no estado assíncrono associado. Qualquer valor retornado é armazenado automaticamente como o resultado retornado do estado assíncrono associado.

Em comparação com packaged_task::operator(), o estado assíncrono associado só é definido como ready depois que todos os objetos thread-local no thread de chamada são destruídos. Normalmente, threads bloqueados no estado assíncrono associado não são desbloqueados até que o thread de chamada seja encerrado.

packaged_task::operator=

Transfere o estado assíncrono associado de um objeto especificado.

packaged_task& operator=(packaged_task&& Right);

Parâmetros

Right
Um objeto packaged_task.

Valor de retorno

*this

Comentários

Após a operação, Right não tem mais um estado assíncrono associado.

packaged_task::operator()

Chama o objeto callable que é armazenado no estado assíncrono associado, armazena atomicamente o valor retornado e define o estado como ready.

void operator()(ArgTypes... args);

Comentários

Se o objeto packaged_task não tiver nenhum estado assíncrono associado, esse método gerará um future_error com código de erro no_state.

Se este método ou make_ready_at_thread_exit já tiver sido chamado para um objeto packaged_task que tem o mesmo estado assíncrono associado, esse método gera um future_error com código de erro promise_already_satisfied.

Caso contrário, este operador chama INVOKE(fn, args..., Ty), em que fn é o objeto callable que é armazenado no estado assíncrono associado. Qualquer valor retornado é armazenado atomicamente como o resultado retornado do estado assíncrono associado e o estado é definido como ready. Como resultado, os threads bloqueados no estado assíncrono associado são desbloqueados.

packaged_task::operator bool

Especifica se o objeto tem um associated asynchronous state.

operator bool() const noexcept;

Valor de retorno

true se o objeto tiver um estado assíncrono associado; caso contrário, false.

Construtor packaged_task::packaged_task

Constrói um objeto packaged_task.

packaged_task() noexcept;
packaged_task(packaged_task&& Right) noexcept;
template <class Fn>
   explicit packaged_task(Fn&& fn);

template <class Fn, class Alloc>
   explicit packaged_task(
      allocator_arg_t, const Alloc& alloc, Fn&& fn);

Parâmetros

Right
Um objeto packaged_task.

alloc
Um alocador de memória. Para obter mais informações, confira <allocators>.

fn
Um objeto de função.

Comentários

O primeiro construtor cria um objeto packaged_task que não tem nenhum estado assíncrono associado.

O segundo construtor cria um objeto packaged_task e transfere o estado assíncrono associado de Right. Após a operação, Right não tem mais um estado assíncrono associado.

O terceiro construtor cria um objeto packaged_task que tem uma cópia de fn armazenada em seu estado assíncrono associado.

O quarto construtor cria um objeto packaged_task que tem uma cópia de fn armazenada em seu estado assíncrono associado e usa alloc para alocação de memória.

Destruidor packaged_task::~packaged_task

Destrói um objeto packaged_task.

~packaged_task();

Comentários

Se o estado assíncrono associado não estiver ready, o destruidor armazena uma exceção future_error com um código de erro de broken_promise como resultado no estado assíncrono associado e os threads bloqueados no estado assíncrono associado são desbloqueados.

packaged_task::reset

Usa um novo estado assíncrono associado para substituir o estado assíncrono associado existente.

void reset();

Comentários

Na verdade, esse método executa *this = packaged_task(move(fn)), em que fn é o objeto de função que é armazenado no estado assíncrono associado a este objeto. Portanto, o estado do objeto é desmarcado e get_future, operator() e make_ready_at_thread_exit podem ser chamados como se estivesse em um objeto recém-criado.

packaged_task::swap

Troca o estado assíncrono associado por um objeto especificado.

void swap(packaged_task& Right) noexcept;

Parâmetros

Right
Um objeto packaged_task.

packaged_task::valid

Especifica se o objeto tem um associated asynchronous state.

bool valid() const;

Valor de retorno

true se o objeto tiver um estado assíncrono associado; caso contrário, false.

Confira também

Referência de Arquivos de Cabeçalho
<future>