std:: packaged_task
|
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| Member functions | ||||
| Getting the result | ||||
| Execution | ||||
| Non-member functions | ||||
| Helper classes | ||||
|
(until C++17)
|
||||
| Deduction guides (C++17) |
|
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
|
(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
|
(C++11)
|
spezialisiert den
std::swap
Algorithmus
(Funktions-Template) |
Hilfsklassen
|
(C++11)
(bis C++17)
|
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) |