43f0c059d3
[SVN r83895]
61 lines
1.1 KiB
C++
61 lines
1.1 KiB
C++
// 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;
|
|
}
|
|
|
|
|