У меня есть вопрос, касающийся повышения будущих продолжений. Рассмотрим следующий код:
#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.0
а также Visual Studio 2010
с boost-1.57
а также boost-1.59
,
Спасибо за помощь.
Задача ещё не решена.