Espacios de nombres
Variantes
Acciones

std::packaged_task

De cppreference.com
< cpp‎ | thread
 
 
Biblioteca de apoyo de concurrencia
Hilos
(C++11)
(C++20)
Espacio de nombres this_thread
(C++11)
(C++11)
(C++11)
Cancelación cooperativa
Exclusión mutua
Gestión genérica de bloqueo
(C++11)
(C++11)
(C++11)
(C++11)
Variables de condición
(C++11)
Semáforos
Pestillos y barreras
(C++20)
(C++20)
Futuros
(C++11)
(C++11)
packaged_task
(C++11)
(C++11)
Recuperación segura
Punteros de riesgo
Tipos atómicos
(C++11)
(C++20)
Inicialización de tipos atómicos
(C++11)(en desuso en C++20)
(C++11)(en desuso en C++20)
Orden de memoria
Funciones independientes para operaciones atómicas
Funciones independientes para indicadores atómicos
 
 
Definido en el archivo de encabezado <future>
template<class>class packaged_task;// sin definir
(1) (desde C++11)
template<class R, class ...ArgTypes>
class packaged_task<R(ArgTypes...)>;
(2) (desde C++11)

La plantilla de clase std::packaged_task envuelve o "empaqueta" cualquier objeto invocable (Callable), ya sea una función, expresión lambda, expresión de vinculación u otro objeto función, para que pueda invocarse de forma asincrónica. Su valor de retorno o excepción lanzada se almacena en un estado compartido al que se puede acceder a través de objetos std::future.

Al igual que std::function, std::packaged_task es un contenedor polimórfico que reconoce el asignador de memoria: el objeto invocable almacenado se puede asignar en el montículo o con un asignador proporcionado.

(hasta C++17)

Contenido

[editar]Funciones miembro

Construye el objeto tarea.
(función miembro pública)[editar]
Destruye el objeto tarea.
(función miembro pública)[editar]
Mueve el objeto tarea.
(función miembro pública)[editar]
Comprueba si el objeto de la tarea tiene una función válida
Original:
checks if the task object has a valid function
The text has been machine-translated via Google Translate.
You can help to correct and verify the translation. Click here for instructions.

(función miembro pública)[editar]
Intercambia dos objetos tarea.
(función miembro pública)[editar]
Obtener el resultado
Devuelve un objeto std::future asociado con el resultado prometido.
(función miembro pública)[editar]
Ejecución
Ejecuta la función.
(función miembro pública)[editar]
Ejecuta la función asegurándose de que el resultado esté listo solo una vez que el hilo actual termine.
(función miembro pública)[editar]
Restablece el estado abandonando cualquier resultado almacenado de ejecuciones anteriores.
(función miembro pública)[editar]

[editar]Funciones no miembro

Especializa al algoritmo std::swap.
(plantilla de función)[editar]

[editar]Clases auxiliares

Especializa al rasgo de tipo std::uses_allocator
(especialización de plantilla de clase)[editar]

[editar]Guías de deducción(desde C++17)

[editar]Ejemplo

#include <iostream>#include <cmath>#include <thread>#include <future>#include <functional>   // función única para evitar eliminar la ambigüedad del conjunto de sobrecarga de std::powint f(int x, int y){returnstd::pow(x,y);}   void tarea_lambda(){ std::packaged_task<int(int,int)> task([](int a, int b){returnstd::pow(a, b);});std::future<int> result = task.get_future();   task(2, 9);   std::cout<<"tarea_lambda:\t"<< result.get()<<'\n';}   void tarea_bind(){ std::packaged_task<int()> task(std::bind(f, 2, 11));std::future<int> result = task.get_future();   task();   std::cout<<"tarea_bind:\t"<< result.get()<<'\n';}   void tarea_hilo(){ std::packaged_task<int(int,int)> task(f);std::future<int> result = task.get_future();   std::thread tarea_td(std::move(task), 2, 10); tarea_td.join();   std::cout<<"tarea_hilo:\t"<< result.get()<<'\n';}   int main(){ tarea_lambda(); tarea_bind(); tarea_hilo();}

Salida:

tarea_lambda: 512 tarea_bind: 2048 tarea_hilo: 1024

[editar]Informes de defectos

Los siguientes informes de defectos de cambio de comportamiento se aplicaron de manera retroactiva a los estándares de C++ publicados anteriormente.

ID Aplicado a Comportamiento según lo publicado Comportamiento correcto
LWG 3117 C++17 Faltaban las guías de deducción para packaged_task. Se añadieron.

[editar]Véase también

(C++11)
Espera a un valor que se establece asíncronamente.
(plantilla de clase)[editar]
close