#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_status
là deferred
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.
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. –
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
Bỏ phiếu để đóng, vì vấn đề không có độ phân giải. –