123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960 |
- // Copyright (C) 2010 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
- #include <cassert>
- #include <vector>
- #include <future>
- #include <functional>
- #include <boost/thread/future.hpp>
- int TRUC = 42;
- int main()
- {
- std::vector< std::function<void()> > work_queue;
- auto do_some_work = [&]()-> boost::future<int*>
- {
- auto promise = std::make_shared<boost::promise<int*>>();
- #if 0
- work_queue.push_back( [=]
- {
- promise->set_value( &TRUC );
- });
- #else
- auto inner = [=]()
- {
- promise->set_value( &TRUC );
- };
- work_queue.push_back(inner);
- #endif
- return promise->get_future();
- };
- auto ft_value = do_some_work();
- while( !work_queue.empty() )
- {
- #if 0
- auto work = work_queue.back();
- #else
- std::function<void()> work;
- work = work_queue.back();
- #endif
- work_queue.pop_back();
- work();
- }
- auto value = ft_value.get();
- assert( value == &TRUC );
- return 0;
- }
|