#include <iostream>
#include <future>
#include <chrono>
using namespace std;
using namespace std::chrono;
int sampleFunction(int a)
{
return a;
}
int main()
{
future<int> f1=async(launch::deferred,sampleFunction,10);
future_status statusF1=f1.wait_for(seconds(10));
if(statusF1==future_status::ready)
cout<<"Future is ready"<<endl;
else if (statusF1==future_status::timeout)
cout<<"Timeout occurred"<<endl;
else if (statusF1==future_status::deferred)
cout<<"Task is deferred"<<endl;
cout<<"Value : "<<f1.get()<<endl;
}
Output -
Timeout occurred
Value : 10
In obigem Beispiel arbeiten, ich future_status
erwartete deferred
statt timeout
zu sein. sampleFunction
wurde als launch::deferred
gestartet. Daher wird es nicht ausgeführt, bis f1.get()
aufgerufen wurde. In diesem Zustand sollte wait_for
future_status::deferred
und nicht future_status::timeout
zurückgegeben werden.C++ 11 future_status :: latente nicht
Schätzen Sie, wenn mir jemand helfen kann, dies zu verstehen. Ich bin mit g ++ Version 4.7.0 auf Filzhut 17.
GCC und die mitgelieferte Standardbibliothek implementieren noch nicht alle Funktionen von C++ 11. Siehe z.B. [hier] (http://gcc.gnu.org/onlinedocs/libstdc++/manual/status.html) für den Status der Bibliothek. –
von der von Joachim zitierten Seite: "Klassenvorlage future: \t Teilweise: Zeitgesteuerte Wartefunktionen geben future_status nicht zurück". sagt alles – Walter
Voting zu schließen, da das Problem keine Auflösung hat. –