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_statusに. として発売されました。したがって、が呼び出されるまで実行されません。そのような状態で返品するべきではありません。deferredtimeoutsampleFunctionlaunch::deferredf1.get()wait_forfuture_status::deferredfuture_status::timeout

誰かがこれを理解するのを手伝ってくれるなら感謝します。fedora 17 で g++ バージョン 4.7.0 を使用しています。

4

1 に答える 1

3

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

于 2012-09-20T15:09:10.523 に答える