◐ Shell
clean mode source ↗

std::packaged_task - cppreference.com

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, 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)

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]

Funciones no miembro

Clases auxiliares

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

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

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.

Véase también

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