C ++ 11 future :: wait_for编译错误

时间:2014-04-21 08:34:52

标签: c++ multithreading c++11 future

我正在尝试制作多线程应用程序,其中每个线程将在不同时间处理任务。所以我想使用future和future :: wait_for函数。 但是当我只使用CPP reference

中的代码时
#include <iostream>
#include <future>
#include <thread>
#include <chrono>

int main()
{
    std::future<int> future = std::async(std::launch::async, [](){ 
        std::this_thread::sleep_for(std::chrono::seconds(3));
        return 8;  
    }); 

    std::cout << "waiting...\n";
    std::future_status status;
    do {
        status = future.wait_for(std::chrono::seconds(1));
        if (status == std::future_status::deferred) {
            std::cout << "deferred\n";
        } else if (status == std::future_status::timeout) {
            std::cout << "timeout\n";
        } else if (status == std::future_status::ready) {
            std::cout << "ready!\n";
        }
    } while (status != std::future_status::ready); 

    std::cout << "result is " << future.get() << '\n';
}

我收到编译错误:

 thread.cpp:31:58: error: cannot convert ‘bool’ to ‘std::future_status’ in assignment

我使用的是ubuntu 12.04和gcc 4.6.3版本(Ubuntu / Linaro 4.6.3-1ubuntu5) 有什么想法吗 ? 谢谢 !

2 个答案:

答案 0 :(得分:3)

G ++ 4.6.3不完全支持C ++ 11,因此更新到完全支持C ++ 11(gcc 4.7或更高版本)的更高版本将解决此类问题。或者使用clang 3.4(3.2支持很多C ++ 11,但3.4支持更多,并且在此基础上有更好的优化)。

答案 1 :(得分:1)

根据此提交日志,2012年2月的返回类型已从bool更改为std::future_status,而GCC 4。7(2012年3月22日)是新版本{的第一个版本{1}}。