📄 future.hpp
字号:
/*! \file* \brief TODO.** TODO. ** Copyright (c) 2005-2007 Philipp Henkel** Use, modification, and distribution are subject to 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)** http://threadpool.sourceforge.net**/#ifndef THREADPOOL_FUTURE_HPP_INCLUDED#define THREADPOOL_FUTURE_HPP_INCLUDED #include "./detail/future.hpp"#include <boost/utility/enable_if.hpp>//#include "pool.hpp"//#include <boost/utility.hpp>//#include <boost/thread/mutex.hpp>namespace boost { namespace threadpool{ /*! \brief Experimental. Do not use in production code. TODO. * * TODO Future * * \see TODO * */ template<class Result> class future{private: shared_ptr<detail::future_impl<Result> > m_impl;public: typedef Result const & result_type; //!< Indicates the functor's result type. typedef Result future_result_type; //!< Indicates the future's result type.public: future() : m_impl(new detail::future_impl<future_result_type>()) // TODO remove this { } // only for internal usage future(shared_ptr<detail::future_impl<Result> > const & impl) : m_impl(impl) { } bool ready() const { return m_impl->ready(); } void wait() const { m_impl->wait(); } bool timed_wait(boost::xtime const & timestamp) const { return m_impl->timed_wait(timestamp); } result_type operator()() // throw( thread::cancelation_exception, ... ) { return (*m_impl)(); } result_type get() // throw( thread::cancelation_exception, ... ) { return (*m_impl)(); } bool cancel() { return m_impl->cancel(); } bool is_cancelled() const { return m_impl->is_cancelled(); }};template<class Pool, class Function>typename disable_if < is_void< typename result_of< Function() >::type >, future< typename result_of< Function() >::type >>::typeschedule(Pool& pool, const Function& task){ typedef typename result_of< Function() >::type future_result_type; // create future impl and future shared_ptr<detail::future_impl<future_result_type> > impl(new detail::future_impl<future_result_type>); future <future_result_type> res(impl); // schedule future impl pool.schedule(detail::future_impl_task_func<detail::future_impl, Function>(task, impl)); // return future return res;/* TODO if(pool->schedule(bind(&Future::run, future))) { return future; } else { // construct empty future return error_future; } */}} } // namespace boost::threadpool#endif // THREADPOOL_FUTURE_HPP_INCLUDED
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -