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
(C++11)
Gestión genérica de bloqueo
(C++11)
(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)
(C++11)
Recuperación segura
(C++26)
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::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) [editar]