Namespaces
Variants

std:: packaged_task

From cppreference.net
Concurrency support library
Threads
(C++11)
(C++20)
this_thread namespace
(C++11)
(C++11)
Cooperative cancellation
Mutual exclusion
Generic lock management
Condition variables
(C++11)
Semaphores
Latches and Barriers
(C++20)
(C++20)
Futures
(C++11)
(C++11)
packaged_task
(C++11)
(C++11)
Safe reclamation
Hazard pointers
Atomic types
(C++11)
(C++20)
Initialization of atomic types
(C++11) (deprecated in C++20)
(C++11) (deprecated in C++20)
Memory ordering
(C++11) (deprecated in C++26)
Free functions for atomic operations
Free functions for atomic flags
Definiert im Header <future>
template < class >
class packaged_task ;
(1) (seit C++11)
(nicht definiert)
template < class R, class ... ArgTypes >
class packaged_task < R ( ArgTypes... ) > ;
(2) (seit C++11)

Die Klassenvorlage std::packaged_task kapselt jedes Callable Ziel (Funktion, Lambda-Ausdruck, Bind-Ausdruck oder anderes Funktionsobjekt), sodass es asynchron aufgerufen werden kann. Sein Rückgabewert oder ausgelöste Ausnahme wird in einem gemeinsamen Zustand gespeichert, auf den durch std::future Objekte zugegriffen werden kann.

Genau wie std::function , ist std::packaged_task ein polymorpher, allocator-sensitiver Container: Das gespeicherte aufrufbare Ziel kann auf dem Heap oder mit einem bereitgestellten Allokator allokiert werden.

(bis C++17)

Inhaltsverzeichnis

Memberfunktionen

Konstruiert das Task-Objekt
(public member function)
Destruiert das Task-Objekt
(public member function)
Verschiebt das Task-Objekt
(public member function)
Prüft, ob das Task-Objekt eine gültige Funktion besitzt
(public member function)
Tauscht zwei Task-Objekte aus
(public member function)
Ergebnisabruf
Gibt einen std::future zurück, der mit dem zugesagten Ergebnis verknüpft ist
(public member function)
Ausführung
Führt die Funktion aus
(public member function)
Führt die Funktion aus und stellt sicher, dass das Ergebnis erst bereitsteht, wenn der aktuelle Thread beendet wird
(public member function)
Setzt den Zustand zurück und verwirft alle gespeicherten Ergebnisse vorheriger Ausführungen
(public member function)

Nicht-Member-Funktionen

spezialisiert den std::swap Algorithmus
(Funktions-Template)

Hilfsklassen

spezialisiert das std::uses_allocator Type-Trait
(Klassen-Template-Spezialisierung)

Deduktionsleitfäden (seit C++17)

Beispiel

#include <cmath>
#include <functional>
#include <future>
#include <iostream>
#include <thread>
// unique function to avoid disambiguating the std::pow overload set
int f(int x, int y) { return std::pow(x, y); }
void task_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 << "task_lambda:\t" << result.get() << '\n';
}
void task_bind()
{
    std::packaged_task<int()> task(std::bind(f, 2, 11));
    std::future<int> result = task.get_future();
    task();
    std::cout << "task_bind:\t" << result.get() << '\n';
}
void task_thread()
{
    std::packaged_task<int(int, int)> task(f);
    std::future<int> result = task.get_future();
    std::thread task_td(std::move(task), 2, 10);
    task_td.join();
    std::cout << "task_thread:\t" << result.get() << '\n';
}
int main()
{
    task_lambda();
    task_bind();
    task_thread();
}

Ausgabe:

task_lambda: 512
task_bind:   2048
task_thread: 1024

Fehlerberichte

Die folgenden verhaltensändernden Fehlerberichte wurden rückwirkend auf zuvor veröffentlichte C++-Standards angewendet.

DR Angewendet auf Verhalten wie veröffentlicht Korrektes Verhalten
LWG 3117 C++17 Deduction Guides für packaged_task fehlten hinzugefügt

Siehe auch

(C++11)
wartet auf einen asynchron gesetzten Wert
(Klassentemplate)