12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364 |
- // Copyright (C) 2014 Vicente Botet
- //
- // Distributed under the Boost Software License, Version 1.0. (See accompanying
- // file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
- #define BOOST_THREAD_VERSION 4
- // BoostFutureTest.cpp : Defines the entry point for the console application.
- //
- #include <iostream>
- // boost version 1.60.0
- // has the following set.
- #define BOOST_THREAD_VERSION 4
- // #define BOOST_THREAD_PROVIDES_EXECUTORS
- #include <boost/thread/future.hpp>
- int main()
- {
- #if __cplusplus >= 201103L
- int value = 0;
- int tmpValue = 0;
- boost::promise<void> promise1;
- boost::promise<void> promise2;
- auto future1 = promise1.get_future();
- auto waitFuture = future1.then([&tmpValue, &promise2](boost::future<void> future){
- assert(future.is_ready()); // this works correctly and is ready.
- auto fut = boost::async(boost::launch::async, [&promise2, &tmpValue](){
- boost::this_thread::sleep_for(boost::chrono::seconds(1));
- tmpValue = 1;
- promise2.set_value();
- std::cout << "Step 2 "<< std::endl; // should print 1 but prints 0
- });
- std::cout << "Step 1 "<< std::endl; // should print 1 but prints 0
- return promise2.get_future();
- //return ;
- }).then([&value, &tmpValue](boost::future<boost::future<void>> future){
- //}).then([&value, &tmpValue](boost::future<void> future){
- // error: no matching function for call to ‘boost::future<boost::future<void> >::then(main()::<lambda(boost::future<void>)>)’
- // as expected
- assert(future.is_ready()); // this doesn't work correctly and is not ready.
- value = tmpValue;
- });
- promise1.set_value();
- waitFuture.wait();
- std::cout << "value = " << value << std::endl; // should print 1 but prints 0
- #endif
- return 0;
- }
|