/*! \file * \brief Pool adaptors. * * This file contains an easy-to-use adaptor similar to a smart * pointer for the pool class. * * 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_POOL_ADAPTORS_HPP_INCLUDED #define THREADPOOL_POOL_ADAPTORS_HPP_INCLUDED #include namespace boost { namespace threadpool { // TODO convenience scheduling function /*! Schedules a Runnable for asynchronous execution. A Runnable is an arbitrary class with a run() * member function. This a convenience shorthand for pool->schedule(bind(&Runnable::run, task_object)). * \param * \param obj The Runnable object. The member function run() will be exectued and should not throw execeptions. * \return true, if the task could be scheduled and false otherwise. */ template bool schedule(Pool& pool, shared_ptr const & obj) { return pool->schedule(bind(&Runnable::run, obj)); } /*! Schedules a task for asynchronous execution. The task will be executed once only. * \param task The task function object. */ template typename enable_if < is_void< typename result_of< typename Pool::task_type() >::type >, bool >::type schedule(Pool& pool, typename Pool::task_type const & task) { return pool.schedule(task); } template typename enable_if < is_void< typename result_of< typename Pool::task_type() >::type >, bool >::type schedule(shared_ptr const pool, typename Pool::task_type const & task) { return pool->schedule(task); } } } // namespace boost::threadpool #endif // THREADPOOL_POOL_ADAPTORS_HPP_INCLUDED