std::packaged_task
De cppreference.com
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, |
(hasta C++17) |
Contenido |
[editar] Funciones miembro
Construye el objeto tarea. (función miembro pública) | |
Destruye el objeto tarea. (función miembro pública) | |
Mueve el objeto tarea. (función miembro pública) | |
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) | |
Intercambia dos objetos tarea. (función miembro pública) | |
Obtener el resultado | |
Devuelve un objeto std::future asociado con el resultado prometido. (función miembro pública) | |
Ejecución | |
Ejecuta la función. (función miembro pública) | |
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) | |
Restablece el estado abandonando cualquier resultado almacenado de ejecuciones anteriores. (función miembro pública) |
[editar] Funciones no miembro
Especializa al algoritmo std::swap. (plantilla de función) |
[editar] Clases auxiliares
Especializa al rasgo de tipo std::uses_allocator (especialización de plantilla de clase) |
[editar] Guías de deducción(desde C++17)
[editar] Ejemplo
Ejecuta este código
#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::pow int f(int x, int y) { return std::pow(x,y); } void tarea_lambda() { std::packaged_task<int(int,int)> task([](int a, int b) { return std::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) |