2012-08-27 10 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 बजाय timeout किया जाना है। sampleFunction को launch::deferred के रूप में लॉन्च किया गया है। इसलिए इसे f1.get() तक निष्पादित नहीं किया जाएगा। ऐसी स्थिति में wait_forfuture_status::deferred और future_status::timeout वापस नहीं होना चाहिए था।सी ++ 11 future_status ::

अगर कोई मुझे समझने में मेरी सहायता कर सकता है तो सराहना करें। मैं फेडोरा पर छ उपयोग कर रहा हूँ ++ संस्करण 4.7.0 17.

+9

जीसीसी और आपूर्ति की गई मानक लाइब्रेरी अभी तक सी ++ 11 की सभी कार्यक्षमताओं को पूरी तरह कार्यान्वित नहीं करती है। उदाहरण देखें [यहां] (पुस्तकालय की स्थिति के लिए http://gcc.gnu.org/onlinedocs/libstdc++/manual/status.html)। Joachim द्वारा उद्धृत पृष्ठ से –

+0

: "कक्षा टेम्पलेट भविष्य: \t आंशिक: समय प्रतीक्षा कार्य भविष्य_स्टैटस वापस नहीं करते हैं"। यह सभी – Walter

+0

बंद करने के लिए मतदान कर रहा है, क्योंकि इस मुद्दे में कोई समाधान नहीं है। –

उत्तर

3

जीसीसी और GNU एसटीएल पूरा सी ++ 11.

यहाँ आप जीसीसी और GNU एसटीएल में सी ++ 11 कार्यान्वयन की स्थिति की जांच कर सकते का कोई समर्थन नहीं है : http://blog.gmane.org/gmane.comp.gcc.bugs/month=20120201

:

http://gcc.gnu.org/projects/cxx0x.html

http://gcc.gnu.org/onlinedocs/libstdc++/manual/status.html

इसके अलावा, इस चर्चा धागा पढ़ 10