Compartir vía


packaged_task (Clase)

Describe un proveedor asincrónico que es un contenedor de llamadas cuya signatura de llamada es Ty(ArgTypes...). Su estado asincrónico asociado contiene una copia del objeto al que se puede llamar, además del resultado posible.

Sintaxis

template <class>
class packaged_task;

Miembros

Constructores públicos

Nombre Descripción
packaged_task Construye un objeto packaged_task.
packaged_task::~packaged_task (Destructor) Destruye un objeto packaged_task .

Métodos públicos

Nombre Descripción
get_future Devuelve un objeto future que tiene el mismo estado asincrónico asociado.
make_ready_at_thread_exit Llama al objeto que se puede llamar que está almacenado en el estado asincrónico asociado y almacena el valor devuelto de forma atómica.
reset Reemplaza el estado asincrónico asociado.
swap Intercambia el estado asincrónico asociado con un objeto especificado.
valid Especifica si el objeto tiene un estado asincrónico asociado.

Operadores públicos

Nombre Descripción
packaged_task::operator= Transfiere un estado asincrónico asociado de un objeto especificado.
packaged_task::operator() Llama al objeto que se puede llamar que está almacenado en el estado asincrónico asociado, almacena el valor devuelto de forma atómica y establece el estado en Listo.
packaged_task::operator bool Especifica si el objeto tiene un estado asincrónico asociado.

Requisitos

Encabezado:<future>

Espacio de nombres: std

packaged_task::get_future

Devuelve un objeto de tipo future<Ty> que tiene el mismo estado asincrónico asociado.

future<Ty> get_future();

Comentarios

Si el objeto packaged_task no tiene un estado asincrónico asociado, este método produce un future_error que tiene un código de error de no_state.

Si ya se ha llamado a este método para un objeto packaged_task que tiene el mismo estado asincrónico asociado, el método produce un future_error que tiene un código de error de future_already_retrieved.

packaged_task::make_ready_at_thread_exit

Llama al objeto que se puede llamar que está almacenado en el estado asincrónico asociado y almacena el valor devuelto de forma atómica.

void make_ready_at_thread_exit(ArgTypes... args);

Comentarios

Si el objeto packaged_task no tiene un estado asincrónico asociado, este método produce un future_error que tiene un código de error de no_state.

Si ya se ha llamado a este método o a make_ready_at_thread_exit para un objeto packaged_task que tiene el mismo estado asincrónico asociado, el método produce un future_error que tiene un código de error de promise_already_satisfied.

De otro modo, este operador llama a INVOKE(fn, args..., Ty), donde fn es el objeto que se puede llamar que está almacenado en el estado asincrónico asociado. Cualquier valor devuelto se almacena de forma atómica como el resultado devuelto del estado asincrónico asociado.

A diferencia de packaged_task::operator(), el estado asincrónico asociado no se establece en ready hasta que no se han destruido todos los objetos locales de subprocesos del subproceso de llamada. Normalmente, los subprocesos que están bloqueados en el estado asincrónico asociado no se desbloquean hasta que no se sale del subproceso de llamada.

packaged_task::operator=

Transfiere el estado asincrónico asociado de un objeto especificado.

packaged_task& operator=(packaged_task&& Right);

Parámetros

Right
Un objeto packaged_task.

Valor devuelto

*this

Comentarios

Después de la operación, Right ya no tiene un estado asincrónico asociado.

packaged_task::operator()

Llama al objeto que se puede llamar que está almacenado en el estado asincrónico asociado, almacena el valor devuelto de forma atómica y establece el estado en Listo.

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

Comentarios

Si el objeto packaged_task no tiene un estado asincrónico asociado, este método produce un future_error que tiene un código de error de no_state.

Si ya se ha llamado a este método o a make_ready_at_thread_exit para un objeto packaged_task que tiene el mismo estado asincrónico asociado, el método produce un future_error que tiene un código de error de promise_already_satisfied.

De otro modo, este operador llama a INVOKE(fn, args..., Ty), donde fn es el objeto que se puede llamar que está almacenado en el estado asincrónico asociado. Cualquier valor devuelto se almacena de forma atómica como el resultado devuelto del estado asincrónico asociado, y el estado se establece en Listo. Como resultado, se desbloquean todos los subprocesos bloqueados en el estado asincrónico asociado.

packaged_task::operator bool

Especifica si el objeto tiene associated asynchronous state.

operator bool() const noexcept;

Valor devuelto

Es true si el objeto tiene un estado asincrónico asociado; de lo contrario, es false.

packaged_task::packaged_task (Constructor)

Construye un 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
Un objeto packaged_task.

alloc
Asignador de memoria. Para obtener más información, vea <Asignadores>.

fn
Objeto de función.

Comentarios

El primer constructor crea un objeto packaged_task que no tiene ningún estado asincrónico asociado.

El segundo constructor crea un objeto packaged_task y transfiere el estado asincrónico asociado de Right. Después de la operación, Right ya no tiene un estado asincrónico asociado.

El tercer constructor crea un objeto packaged_task que tiene una copia de fn almacenada en su estado asincrónico asociado.

El cuarto constructor crea un objeto packaged_task que tiene una copia de fn almacenada en su estado asincrónico asociado y usa alloc para la asignación de memoria.

packaged_task::~packaged_task (Destructor)

Destruye un objeto packaged_task .

~packaged_task();

Comentarios

Si el estado asincrónico asociado no está listo, el destructor almacena una excepción future_error que tiene un código de error de broken_promise como el resultado en el estado asincrónico asociado, y cualquier subproceso que esté bloqueado en el estado asincrónico asociado se desbloquea.

packaged_task::reset

Usa un nuevo estado asincrónico asociado para reemplazar el estado asincrónico asociado existente.

void reset();

Comentarios

De hecho, este método ejecuta *this = packaged_task(move(fn)), donde fn es el objeto de función que está almacenado en el estado asincrónico asociado de este objeto. Por lo tanto, el estado del objeto se borra, y puede llamarse a get_future, operator() y make_ready_at_thread_exit como si estuviera en un objeto recién creado.

packaged_task::swap

Intercambia el estado asincrónico asociado con un objeto especificado.

void swap(packaged_task& Right) noexcept;

Parámetros

Right
Un objeto packaged_task.

packaged_task::valid

Especifica si el objeto tiene associated asynchronous state.

bool valid() const;

Valor devuelto

Es true si el objeto tiene un estado asincrónico asociado; de lo contrario, es false.

Consulte también

Referencia de archivos de encabezado
<future>