diff --git a/include/boost/asio/basic_deadline_timer.hpp b/include/boost/asio/basic_deadline_timer.hpp index 27a75f3b..3aa67b95 100644 --- a/include/boost/asio/basic_deadline_timer.hpp +++ b/include/boost/asio/basic_deadline_timer.hpp @@ -122,7 +122,9 @@ namespace asio { */ template , - typename TimerService = deadline_timer_service > + typename TimerSchedulerType = boost::asio::detail::timer_scheduler, + typename TimerService = deadline_timer_service< + Time, TimeTraits, TimerSchedulerType> > class basic_deadline_timer : public basic_io_object { @@ -133,6 +135,9 @@ class basic_deadline_timer /// The time type. typedef typename traits_type::time_type time_type; + /// The TimerSchedulerType. + typedef TimerSchedulerType timer_scheduler_type; + /// The duration type. typedef typename traits_type::duration_type duration_type; diff --git a/include/boost/asio/basic_waitable_timer.hpp b/include/boost/asio/basic_waitable_timer.hpp index 3f63c780..497915a5 100644 --- a/include/boost/asio/basic_waitable_timer.hpp +++ b/include/boost/asio/basic_waitable_timer.hpp @@ -123,7 +123,9 @@ namespace asio { */ template , - typename WaitableTimerService = waitable_timer_service > + typename TimerSchedulerType = boost::asio::detail::timer_scheduler, + typename WaitableTimerService = waitable_timer_service< + Clock, WaitTraits, TimerSchedulerType> > class basic_waitable_timer : public basic_io_object { @@ -140,6 +142,9 @@ class basic_waitable_timer /// The wait traits type. typedef WaitTraits traits_type; + /// The TimerSchedulerType. + typedef TimerSchedulerType timer_scheduler_type; + /// Constructor. /** * This constructor creates a timer without setting an expiry time. The diff --git a/include/boost/asio/deadline_timer_service.hpp b/include/boost/asio/deadline_timer_service.hpp index 142d6251..53af0711 100644 --- a/include/boost/asio/deadline_timer_service.hpp +++ b/include/boost/asio/deadline_timer_service.hpp @@ -34,13 +34,14 @@ namespace asio { /// Default service implementation for a timer. template > + typename TimeTraits = boost::asio::time_traits, + typename TimerSchedulerType = boost::asio::detail::timer_scheduler> class deadline_timer_service #if defined(GENERATING_DOCUMENTATION) : public boost::asio::io_service::service #else : public boost::asio::detail::service_base< - deadline_timer_service > + deadline_timer_service > #endif { public: @@ -48,6 +49,8 @@ class deadline_timer_service /// The unique service identifier. static boost::asio::io_service::id id; #endif + /// The timer scheduler type + typedef TimerSchedulerType timer_scheduler_type; /// The time traits type. typedef TimeTraits traits_type; @@ -60,7 +63,8 @@ class deadline_timer_service private: // The type of the platform-specific implementation. - typedef detail::deadline_timer_service service_impl_type; + typedef detail::deadline_timer_service< + traits_type, timer_scheduler_type> service_impl_type; public: /// The implementation type of the deadline timer. @@ -73,7 +77,8 @@ class deadline_timer_service /// Construct a new timer service for the specified io_service. explicit deadline_timer_service(boost::asio::io_service& io_service) : boost::asio::detail::service_base< - deadline_timer_service >(io_service), + deadline_timer_service< + TimeType, TimeTraits, TimerSchedulerType> >(io_service), service_impl_(io_service) { } diff --git a/include/boost/asio/detail/deadline_timer_service.hpp b/include/boost/asio/detail/deadline_timer_service.hpp index 74a32265..7fab4a7a 100644 --- a/include/boost/asio/detail/deadline_timer_service.hpp +++ b/include/boost/asio/detail/deadline_timer_service.hpp @@ -41,7 +41,7 @@ namespace boost { namespace asio { namespace detail { -template +template class deadline_timer_service { public: @@ -51,6 +51,9 @@ class deadline_timer_service // The duration type. typedef typename Time_Traits::duration_type duration_type; + // The timer scheduler type + typedef TimerSchedulerType timer_scheduler_type; + // The implementation type of the timer. This type is dependent on the // underlying implementation of the timer service. struct implementation_type @@ -63,7 +66,7 @@ class deadline_timer_service // Constructor. deadline_timer_service(boost::asio::io_service& io_service) - : scheduler_(boost::asio::use_service(io_service)) + : scheduler_(boost::asio::use_service(io_service)) { scheduler_.init_task(); scheduler_.add_timer_queue(timer_queue_); @@ -217,7 +220,7 @@ class deadline_timer_service timer_queue timer_queue_; // The object that schedules and executes timers. Usually a reactor. - timer_scheduler& scheduler_; + timer_scheduler_type& scheduler_; }; } // namespace detail diff --git a/include/boost/asio/waitable_timer_service.hpp b/include/boost/asio/waitable_timer_service.hpp index f1709051..2ad6cae7 100644 --- a/include/boost/asio/waitable_timer_service.hpp +++ b/include/boost/asio/waitable_timer_service.hpp @@ -30,13 +30,14 @@ namespace asio { /// Default service implementation for a timer. template > + typename WaitTraits = boost::asio::wait_traits, + typename TimerSchedulerType = boost::asio::detail::timer_scheduler> class waitable_timer_service #if defined(GENERATING_DOCUMENTATION) : public boost::asio::io_service::service #else : public boost::asio::detail::service_base< - waitable_timer_service > + waitable_timer_service > #endif { public: @@ -57,10 +58,14 @@ class waitable_timer_service /// The wait traits type. typedef WaitTraits traits_type; + /// The TimerSchedulerType. + typedef TimerSchedulerType timer_scheduler_type; + private: // The type of the platform-specific implementation. typedef detail::deadline_timer_service< - detail::chrono_time_traits > service_impl_type; + detail::chrono_time_traits, + TimerSchedulerType> service_impl_type; public: /// The implementation type of the waitable timer. @@ -73,7 +78,8 @@ class waitable_timer_service /// Construct a new timer service for the specified io_service. explicit waitable_timer_service(boost::asio::io_service& io_service) : boost::asio::detail::service_base< - waitable_timer_service >(io_service), + waitable_timer_service< + Clock, WaitTraits, TimerSchedulerType> >(io_service), service_impl_(io_service) { }