diff options
author | DongHun Kwak <dh0128.kwak@samsung.com> | 2016-03-21 15:45:20 +0900 |
---|---|---|
committer | DongHun Kwak <dh0128.kwak@samsung.com> | 2016-03-21 15:46:37 +0900 |
commit | 733b5d5ae2c5d625211e2985ac25728ac3f54883 (patch) | |
tree | a5b214744b256f07e1dc2bd7273035a7808c659f /boost/thread/executors/detail/priority_executor_base.hpp | |
parent | 08c1e93fa36a49f49325a07fe91ff92c964c2b6c (diff) | |
download | boost-733b5d5ae2c5d625211e2985ac25728ac3f54883.tar.gz boost-733b5d5ae2c5d625211e2985ac25728ac3f54883.tar.bz2 boost-733b5d5ae2c5d625211e2985ac25728ac3f54883.zip |
Imported Upstream version 1.58.0upstream/1.58.0
Change-Id: If0072143aa26874812e0db6872e1efb10a3e5e94
Signed-off-by: DongHun Kwak <dh0128.kwak@samsung.com>
Diffstat (limited to 'boost/thread/executors/detail/priority_executor_base.hpp')
-rw-r--r-- | boost/thread/executors/detail/priority_executor_base.hpp | 77 |
1 files changed, 77 insertions, 0 deletions
diff --git a/boost/thread/executors/detail/priority_executor_base.hpp b/boost/thread/executors/detail/priority_executor_base.hpp new file mode 100644 index 0000000000..2191c0b37a --- /dev/null +++ b/boost/thread/executors/detail/priority_executor_base.hpp @@ -0,0 +1,77 @@ +// Copyright (C) 2014 Ian Forbed +// Copyright (C) 2014 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_PRIORITY_EXECUTOR_BASE_HPP +#define BOOST_THREAD_EXECUTORS_DETAIL_PRIORITY_EXECUTOR_BASE_HPP + +#include <boost/atomic.hpp> +#include <boost/function.hpp> +#include <boost/thread/thread.hpp> +#include <boost/thread/concurrent_queues/sync_timed_queue.hpp> +#include <boost/thread/executors/work.hpp> + +namespace boost +{ +namespace executors +{ +namespace detail +{ + template <class Queue> + class priority_executor_base + { + public: + //typedef boost::function<void()> work; + typedef executors::work_pq work; + protected: + typedef Queue queue_type; + queue_type _workq; + + priority_executor_base() {} + public: + + ~priority_executor_base() + { + if(!closed()) + { + this->close(); + } + } + + void close() + { + _workq.close(); + } + + bool closed() + { + return _workq.closed(); + } + + void loop() + { + try + { + for(;;) + { + work task; + queue_op_status st = _workq.wait_pull(task); + if (st == queue_op_status::closed) return; + task(); + } + } + catch (...) + { + std::terminate(); + return; + } + } + }; //end class + +} //end detail namespace +} //end executors namespace +} //end boost namespace +#endif |