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

Trong ví dụ ở trên, tôi đã mong future_statusdeferred thay vì timeout. sampleFunction đã được khởi chạy là launch::deferred. Do đó nó sẽ không được thực hiện cho đến khi f1.get() đã được gọi. Trong điều kiện như vậy wait_for lẽ ra phải trả lại future_status::deferred và không phải future_status::timeout.C++ 11 future_status :: hoãn không làm việc

Đánh giá cao nếu ai đó có thể giúp tôi hiểu điều này. Tôi đang sử dụng g ++ phiên bản 4.7.0 trên fedora 17.

+9

GCC và thư viện chuẩn được cung cấp không thực hiện đầy đủ tất cả các chức năng của C++ 11. Xem ví dụ [tại đây] (http://gcc.gnu.org/onlinedocs/libstdc++/manual/status.html) cho trạng thái của thư viện. –

+0

từ trang được trích dẫn bởi Joachim: "Mẫu lớp tương lai: \t Một phần: Chức năng chờ thời gian không trả lại giá trị tương lai". nói rằng tất cả – Walter

+0

Bỏ phiếu để đóng, vì vấn đề không có độ phân giải. –

Trả lời

Các vấn đề liên quan