thread/test/test_12293.cpp
2017-02-28 23:29:28 +01:00

65 lines
1.8 KiB
C++
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

// 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;
}