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

を動作していないが、私はdeferredの代わりtimeoutするfuture_statusを期待していました。 sampleFunctionlaunch::deferredとして開始されました。したがって、f1.get()が呼び出されるまで実行されません。このような状態でwait_forfuture_status::deferredで、future_status::timeoutではないはずです。C++ 11 future_status ::延期上記の例では

誰かが私にこのことを理解させることができたら大いに感謝します。 私はFedoraの上++バージョン4.7.0をグラムを使用しています17.

+9

GCCと提供された標準ライブラリは、C++ 11のすべての機能をまだ完全に実装していません。例えば、ライブラリの状態については、[here](http://gcc.gnu.org/onlinedocs/libstdc++/manual/status.html)を参照してください。 Joachimによって引用されたページの –

+0

: "クラステンプレート未来:\t部分:時間指定された待機関数はfuture_statusを返しません"。それはすべてだ – Walter

+0

問題は解決されていないので、投票を終了する。 –

答えて

関連する問題