user_scheduler.cpp 1.7 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879
  1. // Copyright (C) 2013 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. #include <boost/config.hpp>
  6. #define BOOST_THREAD_VERSION 5
  7. //#define BOOST_THREAD_USES_LOG
  8. #define BOOST_THREAD_USES_LOG_THREAD_ID
  9. #if ! defined BOOST_NO_CXX11_DECLTYPE
  10. #define BOOST_RESULT_OF_USE_DECLTYPE
  11. #endif
  12. #include <boost/thread/detail/log.hpp>
  13. #include <boost/thread/executors/loop_executor.hpp>
  14. #include <boost/assert.hpp>
  15. #include <boost/thread/thread_only.hpp>
  16. #include <string>
  17. #ifdef BOOST_MSVC
  18. #pragma warning(disable: 4127) // conditional expression is constant
  19. #endif
  20. void p1()
  21. {
  22. BOOST_THREAD_LOG
  23. << boost::this_thread::get_id() << " P1" << BOOST_THREAD_END_LOG;
  24. }
  25. void p2()
  26. {
  27. BOOST_THREAD_LOG
  28. << boost::this_thread::get_id() << " P2" << BOOST_THREAD_END_LOG;
  29. }
  30. void submit_some(boost::loop_executor& tp) {
  31. tp.submit(&p1);
  32. tp.submit(&p2);
  33. tp.submit(&p1);
  34. tp.submit(&p2);
  35. tp.submit(&p1);
  36. tp.submit(&p2);
  37. tp.submit(&p1);
  38. tp.submit(&p2);
  39. tp.submit(&p1);
  40. tp.submit(&p2);
  41. }
  42. int main()
  43. {
  44. BOOST_THREAD_LOG
  45. << boost::this_thread::get_id() << " <MAIN" << BOOST_THREAD_END_LOG;
  46. {
  47. try
  48. {
  49. boost::loop_executor tp;
  50. submit_some(tp);
  51. tp.run_queued_closures();
  52. submit_some(tp);
  53. tp.run_queued_closures();
  54. }
  55. catch (std::exception& ex)
  56. {
  57. BOOST_THREAD_LOG
  58. << "ERRORRRRR " << ex.what() << "" << BOOST_THREAD_END_LOG;
  59. return 1;
  60. }
  61. catch (...)
  62. {
  63. BOOST_THREAD_LOG
  64. << " ERRORRRRR exception thrown" << BOOST_THREAD_END_LOG;
  65. return 2;
  66. }
  67. }
  68. BOOST_THREAD_LOG
  69. << boost::this_thread::get_id() << "MAIN>" << BOOST_THREAD_END_LOG;
  70. return 0;
  71. }