#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.
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. –
ze strony cytowanej przez Joachima: "Przyszłość szablonu klasy: \t Częściowa: Czasowe funkcje oczekiwania nie zwracają future_status". mówi wszystko – Walter
Głosowanie zamyka, ponieważ problem nie ma rozwiązania. –