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

在上面的例子中,我期待future_statusdeferred代替timeoutsampleFunction已推出爲launch::deferred。因此在調用f1.get()之前它不會被執行。在這種情況下,wait_for應該返回future_status::deferred而不是future_status::timeoutC++ 11 future_status ::推遲不工作

感謝有人能幫助我理解這一點。 我使用G ++ 4.7.0版本在Fedora 17

+9

GCC和提供的標準庫尚未完全實現C++ 11的所有功能。見例如[這裏](http://gcc.gnu.org/onlinedocs/libstdc++/manual/status.html)瞭解圖書館的狀態。來自Joachim引用的頁面的 –

+0

:「班級模板未來:\t部分:定時等待函數不返回future_status」。說這一切 – Walter

+0

投票結束,因爲問題沒有解決。 –

回答