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
.