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

de trabajo En ejemplo anterior, que estaba esperando a ser future_statusdeferred en lugar de timeout. sampleFunction ha sido lanzado como launch::deferred. Por lo tanto, no se ejecutará hasta que se haya llamado al f1.get(). En tal condición wait_for debería haber devuelto future_status::deferred y no future_status::timeout.C++ 11 future_status :: diferida no

Apreciar si alguien puede ayudarme a entender esto. estoy usando g ++ versión 4.7.0 en Fedora 17.

+9

GCC y la biblioteca estándar suministrada aún no implementa completamente toda la funcionalidad de C++ 11. Ver p. [aquí] (http://gcc.gnu.org/onlinedocs/libstdc++/manual/status.html) para conocer el estado de la biblioteca. –

+0

de la página citada por Joachim: "Class template future: \t Parcial: las funciones de espera temporizadas no devuelven future_status". lo dice todo – Walter

+0

Votación para cerrar, ya que el problema no tiene resolución. –

Respuesta