提升未来的延续永远不会改变国家

时间:2015-08-17 09:13:28

标签: c++ boost continuation

我有一个关于提升未来延续的问题。请考虑以下代码:

#define BOOST_THREAD_PROVIDES_FUTURE
#define BOOST_THREAD_PROVIDES_FUTURE_CONTINUATION
#define BOOST_THREAD_PROVIDES_FUTURE_UNWRAP
#include <boost/thread.hpp>
#include <boost/thread/future.hpp>
#include <boost/date_time/posix_time/posix_time.hpp>
#include <iostream>


boost::future<int> test() {
  return boost::async([]() {
     for(int i = 0; i < 10; ++i){
       boost::this_thread::sleep(boost::posix_time::milliseconds(1000));
     } 
     return 10;});
}

int main(int argc, char *argv[])
    //boost::future<int> f1 = test();
    boost::future<int> f1 = test().then([](boost::future<int>&& f) {
        return test();});
    int result = f1.get();
    std::cout <<f1.is_ready();
    f1.wait();
    std::cout<<" "<<f1.is_ready() <<std::endl;
}

在我看来,这应该在命令行上打印1 1。相反,我得到0 0。这是延续的预期行为吗?

评论行

boost::future<int> f1 = test().then([](boost::future<int>&& f)  
 {return test();});

并取消注释行

//boost::future<int> f1 = test();

产生预期结果。

使用g++ 5.2.0Visual Studio 2010boost-1.57boost-1.59上进行了测试。

感谢您的帮助。

0 个答案:

没有答案