2012-08-27 11 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 

Nell'esempio di cui sopra, mi aspettavo di essere future_statusdeferred 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.

+9

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

+0

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

+0

Votare per chiudere, poiché il problema non ha alcuna risoluzione. –

risposta