2012-08-27 13 views
8
#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_forfuture_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.

+9

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. –

+0

von der von Joachim zitierten Seite: "Klassenvorlage future: \t Teilweise: Zeitgesteuerte Wartefunktionen geben future_status nicht zurück". sagt alles – Walter

+0

Voting zu schließen, da das Problem keine Auflösung hat. –

Antwort