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

W powyższym przykładzie, spodziewałem future_status być deferred zamiast timeout. sampleFunction został uruchomiony pod numerem launch::deferred. Dlatego też nie zostanie wykonany, dopóki nie zostanie wywołany f1.get(). W takim stanie wait_for powinien powrócić future_status::deferred, a nie future_status::timeout.C++ 11 future_status :: odroczone nie działa

Doceń, jeśli ktoś może mi pomóc to zrozumieć. używam g ++ w wersji 4.7.0 na Fedorze 17.

+9

GCC i dołączona biblioteka standardowa nie w pełni implementują wszystkie funkcje C++ 11. Zobacz np. [tutaj] (http://gcc.gnu.org/onlinedocs/libstdc++/manual/status.html) dla statusu biblioteki. –

+0

ze strony cytowanej przez Joachima: "Przyszłość szablonu klasy: \t Częściowa: Czasowe funkcje oczekiwania nie zwracają future_status". mówi wszystko – Walter

+0

Głosowanie zamyka, ponieważ problem nie ma rozwiązania. –

Odpowiedz