test_ml2.cpp 1.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960
  1. // Copyright (C) 2010 Vicente Botet
  2. //
  3. // Distributed under the Boost Software License, Version 1.0. (See accompanying
  4. // file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
  5. #define BOOST_THREAD_VERSION 4
  6. #include <cassert>
  7. #include <vector>
  8. #include <future>
  9. #include <functional>
  10. #include <boost/thread/future.hpp>
  11. int TRUC = 42;
  12. int main()
  13. {
  14. std::vector< std::function<void()> > work_queue;
  15. auto do_some_work = [&]()-> boost::future<int*>
  16. {
  17. auto promise = std::make_shared<boost::promise<int*>>();
  18. #if 0
  19. work_queue.push_back( [=]
  20. {
  21. promise->set_value( &TRUC );
  22. });
  23. #else
  24. auto inner = [=]()
  25. {
  26. promise->set_value( &TRUC );
  27. };
  28. work_queue.push_back(inner);
  29. #endif
  30. return promise->get_future();
  31. };
  32. auto ft_value = do_some_work();
  33. while( !work_queue.empty() )
  34. {
  35. #if 0
  36. auto work = work_queue.back();
  37. #else
  38. std::function<void()> work;
  39. work = work_queue.back();
  40. #endif
  41. work_queue.pop_back();
  42. work();
  43. }
  44. auto value = ft_value.get();
  45. assert( value == &TRUC );
  46. return 0;
  47. }