#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
Nell'esempio di cui sopra, mi aspettavo di essere future_status
deferred
invece di timeout
. sampleFunction
è stato lanciato come launch::deferred
. Quindi non verrà eseguito finché non è stato chiamato f1.get()
. In tali condizioni wait_for
avrebbe dovuto restituire future_status::deferred
e non future_status::timeout
.C++ 11 future_status :: differita non funziona
Apprezzo se qualcuno può aiutarmi a capire questo. Sto usando g ++ versione 4.7.0 su Fedora 17.
GCC e la libreria standard fornita non implementano completamente tutte le funzionalità di C++ 11. Vedi per es. [qui] (http://gcc.gnu.org/onlinedocs/libstdc++/manual/status.html) per lo stato della libreria. –
dalla pagina citata da Joachim: "Modello di classe futuro: \t Parziale: le funzioni di attesa a tempo non restituiscono lo stato futuro". Dice tutto – Walter
Votare per chiudere, poiché il problema non ha alcuna risoluzione. –