Boost logo

Boost-Commit :

Subject: [Boost-commit] svn:boost r86442 - in trunk: boost/thread libs/thread/example
From: vicente.botet_at_[hidden]
Date: 2013-10-26 06:21:27


Author: viboes
Date: 2013-10-26 06:21:27 EDT (Sat, 26 Oct 2013)
New Revision: 86442
URL: http://svn.boost.org/trac/boost/changeset/86442

Log:
Thread: adapt thread_pool and executor to the new nullary_function work.

Text files modified:
   trunk/boost/thread/executor.hpp | 25 +++++++++++++++++++------
   trunk/boost/thread/thread_pool.hpp | 27 ++++++++++++++++++++++++---
   trunk/libs/thread/example/executor.cpp | 20 ++++++++++----------
   trunk/libs/thread/example/thread_pool.cpp | 20 ++++++++++----------
   4 files changed, 63 insertions(+), 29 deletions(-)

Modified: trunk/boost/thread/executor.hpp
==============================================================================
--- trunk/boost/thread/executor.hpp Sat Oct 26 06:20:13 2013 (r86441)
+++ trunk/boost/thread/executor.hpp 2013-10-26 06:21:27 EDT (Sat, 26 Oct 2013) (r86442)
@@ -14,8 +14,7 @@
 
 #include <boost/thread/detail/delete.hpp>
 #include <boost/thread/detail/move.hpp>
-#include <boost/thread/detail/function_wrapper.hpp>
-
+#include <boost/thread/detail/work.hpp>
 
 #include <boost/config/abi_prefix.hpp>
 
@@ -26,7 +25,7 @@
   {
   public:
     /// type-erasure to store the works to do
- typedef detail::function_wrapper work;
+ typedef thread_detail::work work;
 
     /// executor is not copyable.
     BOOST_THREAD_NO_COPYABLE(executor)
@@ -72,14 +71,28 @@
      * \b Throws: \c sync_queue_is_closed if the thread pool is closed.
      * Whatever exception that can be throw while storing the closure.
      */
-//#if ! defined(BOOST_NO_CXX11_RVALUE_REFERENCES)
+#ifndef BOOST_THREAD_USES_NULLARY_FUNCTION_AS_WORK
     template <typename Closure>
     void submit(Closure const& closure)
     {
       work w ((closure));
       submit(boost::move(w));
     }
-//#endif
+#else
+#if defined(BOOST_NO_CXX11_RVALUE_REFERENCES)
+ template <typename Closure>
+ void submit(Closure & closure)
+ {
+ work w ((closure));
+ submit(boost::move(w));
+ }
+#endif
+ void submit(void (*closure)())
+ {
+ work w ((closure));
+ submit(boost::move(w));
+ }
+#endif
 
     template <typename Closure>
     void submit(BOOST_THREAD_RV_REF(Closure) closure)
@@ -119,7 +132,7 @@
     Executor ex;
   public:
     /// type-erasure to store the works to do
- typedef detail::function_wrapper work;
+ typedef executor::work work;
 
     /// executor is not copyable.
     BOOST_THREAD_NO_COPYABLE(executor_adaptor)

Modified: trunk/boost/thread/thread_pool.hpp
==============================================================================
--- trunk/boost/thread/thread_pool.hpp Sat Oct 26 06:20:13 2013 (r86441)
+++ trunk/boost/thread/thread_pool.hpp 2013-10-26 06:21:27 EDT (Sat, 26 Oct 2013) (r86442)
@@ -15,7 +15,8 @@
 #include <boost/thread/detail/move.hpp>
 #include <boost/thread/scoped_thread.hpp>
 #include <boost/thread/sync_queue.hpp>
-#include <boost/thread/detail/function_wrapper.hpp>
+#include <boost/thread/detail/work.hpp>
+
 
 #ifdef BOOST_NO_CXX11_HDR_FUNCTIONAL
 #include <boost/function.hpp>
@@ -34,10 +35,11 @@
 namespace boost
 {
 
+
   class thread_pool
   {
     /// type-erasure to store the works to do
- typedef detail::function_wrapper work;
+ typedef thread_detail::work work;
     /// the kind of stored threads are scoped threads to ensure that the threads are joined.
     /// A move aware vector type
     typedef scoped_thread<> thread_t;
@@ -171,13 +173,32 @@
      * \b Throws: \c sync_queue_is_closed if the thread pool is closed.
      * Whatever exception that can be throw while storing the closure.
      */
+#ifndef BOOST_THREAD_USES_NULLARY_FUNCTION_AS_WORK
     template <typename Closure>
- void submit(Closure const& closure)
+ void submit(Closure const & closure)
     {
       work w ((closure));
       work_queue.push(boost::move(w));
       //work_queue.push(work(closure));
     }
+#else
+ #if defined(BOOST_NO_CXX11_RVALUE_REFERENCES)
+ template <typename Closure>
+ void submit(Closure & closure)
+ {
+ work w ((closure));
+ work_queue.push(boost::move(w));
+ //work_queue.push(work(closure));
+ }
+ #endif
+ void submit(void (*closure)())
+ {
+ work w ((closure));
+ work_queue.push(boost::move(w));
+ //work_queue.push(work(closure));
+ }
+
+#endif
     template <typename Closure>
     void submit(BOOST_THREAD_RV_REF(Closure) closure)
     {

Modified: trunk/libs/thread/example/executor.cpp
==============================================================================
--- trunk/libs/thread/example/executor.cpp Sat Oct 26 06:20:13 2013 (r86441)
+++ trunk/libs/thread/example/executor.cpp 2013-10-26 06:21:27 EDT (Sat, 26 Oct 2013) (r86442)
@@ -25,17 +25,17 @@
     << boost::this_thread::get_id() << " P2" << BOOST_THREAD_END_LOG;
 }
 
-void push(boost::container::deque<boost::detail::function_wrapper> &data_, BOOST_THREAD_RV_REF(boost::detail::function_wrapper) closure)
+void push(boost::container::deque<boost::thread_detail::work> &data_, BOOST_THREAD_RV_REF(boost::thread_detail::work) closure)
 {
   try
   {
     BOOST_THREAD_LOG
       << boost::this_thread::get_id() << " <MAIN" << BOOST_THREAD_END_LOG;
- boost::detail::function_wrapper v;
+ boost::thread_detail::work v;
     BOOST_THREAD_LOG
       << boost::this_thread::get_id() << " <MAIN" << BOOST_THREAD_END_LOG;
     //v = boost::move(closure);
- //v = boost::forward<boost::detail::function_wrapper>(closure);
+ //v = boost::forward<boost::thread_detail::work>(closure);
     BOOST_THREAD_LOG
       << boost::this_thread::get_id() << " <MAIN" << BOOST_THREAD_END_LOG;
 
@@ -43,7 +43,7 @@
     BOOST_THREAD_LOG
       << boost::this_thread::get_id() << " <MAIN" << BOOST_THREAD_END_LOG;
 
- //data_.push_back(boost::forward<boost::detail::function_wrapper>(closure));
+ //data_.push_back(boost::forward<boost::thread_detail::work>(closure));
     BOOST_THREAD_LOG
       << boost::this_thread::get_id() << " <MAIN" << BOOST_THREAD_END_LOG;
 
@@ -61,14 +61,14 @@
 }
 
 template <typename Closure>
-void submit(boost::container::deque<boost::detail::function_wrapper> &data_, BOOST_THREAD_FWD_REF(Closure) closure)
+void submit(boost::container::deque<boost::thread_detail::work> &data_, BOOST_THREAD_FWD_REF(Closure) closure)
 {
   BOOST_THREAD_LOG
     << boost::this_thread::get_id() << " <MAIN" << BOOST_THREAD_END_LOG;
   //work w =boost::move(closure);
   //work_queue.push(boost::move(w));
- //push(data_, boost::detail::function_wrapper(boost::forward<Closure>(closure)));
- boost::detail::function_wrapper v =boost::forward<Closure>(closure);
+ //push(data_, boost::thread_detail::work(boost::forward<Closure>(closure)));
+ boost::thread_detail::work v =boost::forward<Closure>(closure);
   BOOST_THREAD_LOG
     << boost::this_thread::get_id() << " <MAIN" << BOOST_THREAD_END_LOG;
   push(data_, boost::move(v));
@@ -85,11 +85,11 @@
   {
     try
     {
- boost::detail::function_wrapper f(&p1);
+ boost::thread_detail::work f(&p1);
 
- boost::container::deque<boost::detail::function_wrapper> data_;
+ boost::container::deque<boost::thread_detail::work> data_;
     data_.push_back(boost::move(f));
- data_.push_back(boost::detail::function_wrapper(&p1));
+ data_.push_back(boost::thread_detail::work(&p1));
     submit(data_, &p1);
     }
     catch (std::exception& ex)

Modified: trunk/libs/thread/example/thread_pool.cpp
==============================================================================
--- trunk/libs/thread/example/thread_pool.cpp Sat Oct 26 06:20:13 2013 (r86441)
+++ trunk/libs/thread/example/thread_pool.cpp 2013-10-26 06:21:27 EDT (Sat, 26 Oct 2013) (r86442)
@@ -24,17 +24,17 @@
     << boost::this_thread::get_id() << " P2" << BOOST_THREAD_END_LOG;
 }
 
-void push(boost::container::deque<boost::detail::function_wrapper> &data_, BOOST_THREAD_RV_REF(boost::detail::function_wrapper) closure)
+void push(boost::container::deque<boost::thread_detail::work> &data_, BOOST_THREAD_RV_REF(boost::thread_detail::work) closure)
 {
   try
   {
     BOOST_THREAD_LOG
       << boost::this_thread::get_id() << " <MAIN" << BOOST_THREAD_END_LOG;
- boost::detail::function_wrapper v;
+ boost::thread_detail::work v;
     BOOST_THREAD_LOG
       << boost::this_thread::get_id() << " <MAIN" << BOOST_THREAD_END_LOG;
     //v = boost::move(closure);
- //v = boost::forward<boost::detail::function_wrapper>(closure);
+ //v = boost::forward<boost::thread_detail::work>(closure);
     BOOST_THREAD_LOG
       << boost::this_thread::get_id() << " <MAIN" << BOOST_THREAD_END_LOG;
 
@@ -42,7 +42,7 @@
     BOOST_THREAD_LOG
       << boost::this_thread::get_id() << " <MAIN" << BOOST_THREAD_END_LOG;
 
- //data_.push_back(boost::forward<boost::detail::function_wrapper>(closure));
+ //data_.push_back(boost::forward<boost::thread_detail::work>(closure));
     BOOST_THREAD_LOG
       << boost::this_thread::get_id() << " <MAIN" << BOOST_THREAD_END_LOG;
 
@@ -60,14 +60,14 @@
 }
 
 template <typename Closure>
-void submit(boost::container::deque<boost::detail::function_wrapper> &data_, BOOST_THREAD_FWD_REF(Closure) closure)
+void submit(boost::container::deque<boost::thread_detail::work> &data_, BOOST_THREAD_FWD_REF(Closure) closure)
 {
   BOOST_THREAD_LOG
     << boost::this_thread::get_id() << " <MAIN" << BOOST_THREAD_END_LOG;
   //work w =boost::move(closure);
   //work_queue.push(boost::move(w));
- //push(data_, boost::detail::function_wrapper(boost::forward<Closure>(closure)));
- boost::detail::function_wrapper v =boost::forward<Closure>(closure);
+ //push(data_, boost::thread_detail::work(boost::forward<Closure>(closure)));
+ boost::thread_detail::work v =boost::forward<Closure>(closure);
   BOOST_THREAD_LOG
     << boost::this_thread::get_id() << " <MAIN" << BOOST_THREAD_END_LOG;
   push(data_, boost::move(v));
@@ -84,11 +84,11 @@
   {
     try
     {
- boost::detail::function_wrapper f(&p1);
+ boost::thread_detail::work f(&p1);
 
- boost::container::deque<boost::detail::function_wrapper> data_;
+ boost::container::deque<boost::thread_detail::work> data_;
     data_.push_back(boost::move(f));
- data_.push_back(boost::detail::function_wrapper(&p1));
+ data_.push_back(boost::thread_detail::work(&p1));
     submit(data_, &p1);
     }
     catch (std::exception& ex)


Boost-Commit list run by bdawes at acm.org, david.abrahams at rcn.com, gregod at cs.rpi.edu, cpdaniel at pacbell.net, john at johnmaddock.co.uk