1 // Copyright (C) 2014 Ian Forbed
2 // Copyright (C) 2014 Vicente J. Botet Escriba
3 //
4 //  Distributed under the Boost Software License, Version 1.0. (See accompanying
5 //  file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
6 //
7 
8 #ifndef BOOST_THREAD_EXECUTORS_SCHEDULED_THREAD_POOL_HPP
9 #define BOOST_THREAD_EXECUTORS_SCHEDULED_THREAD_POOL_HPP
10 
11 #include <boost/thread/detail/config.hpp>
12 #if defined BOOST_THREAD_PROVIDES_FUTURE_CONTINUATION && defined BOOST_THREAD_PROVIDES_EXECUTORS && defined BOOST_THREAD_USES_MOVE
13 
14 #include <boost/thread/executors/detail/scheduled_executor_base.hpp>
15 
16 namespace boost
17 {
18 namespace executors
19 {
20 
21   class scheduled_thread_pool : public detail::scheduled_executor_base<>
22   {
23   private:
24     thread_group _workers;
25   public:
26 
scheduled_thread_pool(size_t num_threads)27     scheduled_thread_pool(size_t num_threads) : super()
28     {
29       for(size_t i = 0; i < num_threads; i++)
30       {
31         _workers.create_thread(bind(&super::loop, this));
32       }
33     }
34 
~scheduled_thread_pool()35     ~scheduled_thread_pool()
36     {
37       this->close();
38       _workers.interrupt_all();
39       _workers.join_all();
40     }
41 
42   private:
43     typedef detail::scheduled_executor_base<> super;
44   }; //end class
45 
46 } //end executors namespace
47 
48 using executors::scheduled_thread_pool;
49 
50 } //end boost
51 #endif
52 #endif
53 
54