Nachdem wir im letzen Artikel die Grundlagen von Threads und Multithreading kennengelernt haben,
wollen wir uns in diesem Artikel mit asynchronen Funktionen beschäftigen.
Dafür hat c++ einem header namens future
im Gepäck.
Dieser header enthält die Klasse std::future
und die Funktion std::async
.
Wir inkludieren den Header und erstellen eine Funktion, die wir asynchron ausführen wollen.
#include <iostream>
#include <future>
int worker_function(const int input)
{
return input * 2;
}
int main(){
int input = 1;
auto handle = std::async(std::launch::async, worker_function, input);
auto result = handle.get();
std::cout << "Result: " << result << std::endl;
return 0;
}
std::launch::async ist eine enum, die angibt, wie die Funktion ausgeführt werden soll.
Wir können hier zwischen drei Optionen wählen:
– std::launch::async – die Funktion wird asynchron ausgeführt
– std::launch::deferred – die Funktion wird erst ausgeführt, wenn das Ergebnis benötigt wird
– std::launch::async | std::launch::deferred – die Funktion wird asynchron ausgeführt, wenn möglich
std::async gibt ein std::future zurück. genauer gesagt ein std::future
std::future ist ein template, das den Typ des Ergebnisses angibt.
Wir können das ergebnis mit der funktion get() abfragen.