我有以下的C++代码11:std ::未来超时太早,替代?
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()
我跑得到一个“你好!”输出。
但是,在我的ARM板上安装了gcc 4.7.3版20130328(预发布)(crosstool-NG linaro-1.13.1-4.7-2013.04-20130415 - Linaro GCC 2013.04),我立即得到输出,没有明显延迟(即它不会等待第一秒),也只是继续打印“你好!”直到myfunction()
完成。
根据http://en.cppreference.com/w/cpp/thread/future/wait_for我应该只获得超时状态当且仅当超时已过期。
我怀疑这可能是由于GCC中的“定时等待函数不返回future_status :: deferred”(参考问题C++ 11 future_status::deferred not working)。然而myfunction()
运行,所以最终它不应该总是返回“超时”,不应该吗?
有没有人在ARM平台上有未来:: wait_for的经验,或者有人可以在这个问题上找到一些启示吗?
根据我的经验,一些stdlibC++在x86上并没有完全保持最新,我认为它在ARM上更糟糕。你尝试过boost :: future吗?可能你*使用* std :: future超时太早。 – user3125280
不,还没有。我试图限制我们使用外部库,尤其是如果标准库中有(或者应该是)实现。 – Frankie
标准库只是提升的一个端口 - 如果C++ 11版本不能在你的系统上运行,boost可能会有这种可能。无论如何他们返回什么状态? – user3125280