blob: 13002f867eaa401bdd4e95678a5a5d2fb733027a [file] [log] [blame]
// Copyright (C) 2015 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
#define BOOST_THREAD_PROVIDES_EXECUTORS
#include <boost/thread.hpp>
#include <boost/thread/thread_pool.hpp>
#include <cassert>
auto createFuture()
{
boost::promise<void> promise;
promise.set_value();
return promise.get_future();
}
auto stepOne(boost::basic_thread_pool &executor)
{
auto sendFuture = createFuture();
auto wrappedFuture = sendFuture.then(executor, [](auto f) mutable {
return createFuture();
});
return wrappedFuture.unwrap();
}
auto stepTwo(boost::basic_thread_pool &executor)
{
auto future = stepOne(executor);
return future.then(executor, [](auto f) {
assert(f.is_ready());
});
}
int main()
{
boost::basic_thread_pool executor{1};
stepTwo(executor).get();
}