#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::timeout

感谢有人可以帮助我理解这一点。
我在fedora 17上使用的是g++版本4.7.0。

最佳答案

GCC和GNU STL不支持完整的C++ 11。

在这里,您可以查看GCC和GNU STL中C++ 11的实现状态:

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

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

另外,请阅读此讨论主题:http://blog.gmane.org/gmane.comp.gcc.bugs/month=20120201

关于C++ 11 future_status::deferred无法正常工作,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/12137283/

10-12 17:00