C++11 std::未来超时太早,替代方案?

C++11 std::未来超时太早,替代方案?,c++11,g++,arm,future,C++11,G++,Arm,Future,我有以下C++11代码: auto f = std::async(std::launch::async, [] () { myfunction(); }); std::future_status status; do { status = f.wait_for(std::chrono::seconds(1)); if (status == std::future_status::timeout) { fprintf(stderr, "Hello!\n");

我有以下C++11代码:

auto f = std::async(std::launch::async, [] () { myfunction(); });
std::future_status status;
do {
    status = f.wait_for(std::chrono::seconds(1));
    if (status == std::future_status::timeout) {
        fprintf(stderr, "Hello!\n");
    }
} while (status != std::future_status::ready);
在我的笔记本电脑上,它运行良好的gcc版本4.7.3 Ubuntu/Linaro 4.7.3-1ubuntu1,也就是说,每运行一秒myfunction,我就会收到一个Hello!输出

然而,在我的ARM板上,gcc版本为4.7.3 20130328预发布的crosstool NG linaro-1.13.1-4.7-2013.04-20130415-linaro gcc 2013.04,我立即获得输出,没有明显延迟,即它甚至不等待第一秒,而且它只是一直打印Hello!直到myfunction完成

根据,我应该只在超时过期时才获得超时状态

我怀疑这可能是由于定时等待函数没有返回未来状态::在GCC参考问题中延迟。但是myfunction运行,所以最终它不应该一直返回超时,不是吗


有没有人有过future::wait_for on ARM平台的经验,或者有没有人可以解释一下这个问题?

我将板上的图像从Ubuntu Raring更新为Ubuntu Saucy,代码现在运行良好。正如@user3125280所指出的,这实际上是一个stdlibc++问题。

根据我的经验,在x86上的4.7上,一些stdlibc++还没有完全更新,我想在ARM上更糟糕。你试过未来吗?可能您使用std::future超时太早了。不,还没有。我试图限制我们对外部库的使用,特别是在标准库中有或应该有实现的情况下。标准库只是boost的一个端口-如果c++11版本不能在您的系统上工作,boost可能会。他们到底返回了什么状态?我的板上的boost版本是1.49,它没有未来的支持。有了std,我得到的状态值已经准备好,ARM上的超时等待调用基本上是非阻塞的。如果你的板上没有带futures的boost版本,这可能意味着libstdc++也不可用。