123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566 |
- // Copyright (C) 2014 Ian Forbed
- // Copyright (C) 2014-2015 Vicente J. Botet Escriba
- //
- // Distributed under the Boost Software License, Version 1.0. (See accompanying
- // file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
- //
- #ifndef BOOST_THREAD_EXECUTORS_DETAIL_SCHEDULED_EXECUTOR_BASE_HPP
- #define BOOST_THREAD_EXECUTORS_DETAIL_SCHEDULED_EXECUTOR_BASE_HPP
- #include <boost/thread/concurrent_queues/sync_timed_queue.hpp>
- #include <boost/thread/executors/detail/priority_executor_base.hpp>
- #include <boost/thread/executors/work.hpp>
- #include <boost/thread/thread.hpp>
- #include <boost/atomic.hpp>
- #include <boost/function.hpp>
- #include <boost/config/abi_prefix.hpp>
- namespace boost
- {
- namespace executors
- {
- namespace detail
- {
- template <class Clock=chrono::steady_clock>
- class scheduled_executor_base : public priority_executor_base<concurrent::sync_timed_queue<executors::work_pq, Clock > >
- {
- public:
- typedef executors::work_pq work;
- typedef Clock clock;
- typedef typename clock::duration duration;
- typedef typename clock::time_point time_point;
- protected:
- scheduled_executor_base() {}
- public:
- ~scheduled_executor_base()
- {
- if(! this->closed())
- {
- this->close();
- }
- }
- void submit_at(work w, const time_point& tp)
- {
- this->_workq.push(boost::move(w), tp);
- }
- void submit_after(work w, const duration& dura)
- {
- this->_workq.push(boost::move(w), dura+clock::now());
- }
- }; //end class
- } //end detail namespace
- } //end executors namespace
- } //end boost namespace
- #include <boost/config/abi_suffix.hpp>
- #endif
|