因此,我所有的工作都發生在名爲thread_pool
的班級中。此代碼將工作無論run_item需要什麼到本身:Boost綁定內部提升packaged_task。爲什麼要提升asio認爲它不是CompletionHandler?
template <class task_return_t>
void thread_pool::pool_item(boost::shared_ptr< boost::packaged_task<task_return_t> > pt)
{
internal_tasks.post(boost::bind(&thread_pool::run_item<task_return_t>, this, pt));
//...
這不會編譯:
template <class task_return_t>
void thread_pool::pool_item(boost::shared_ptr< boost::packaged_task<task_return_t> > pt)
{
boost::packaged_task<void> task (boost::bind(&thread_pool::run_item<task_return_t>, this, pt)));
internal_tasks.post(task);
爲什麼?以及如何使它編譯?
我使用boost 1.47.0。錯誤我的VS2010 talls我:
Error 6 error C2665: 'boost::asio::detail::zero_arg_handler_test' : none of the 2 overloads could convert all the argument types C:\Program Files (x86)\Boost-1.47.0\include\boost\asio\impl\io_service.hpp 88 1 cf-server
Error 9 error C2664: 'void boost::asio::detail::task_io_service::post<CompletionHandler>(Handler)' : cannot convert parameter 1 from 'const boost::packaged_task<R>' to 'boost::packaged_task<R>' C:\Program Files (x86)\Boost-1.47.0\include\boost\asio\impl\io_service.hpp 90 1 cf-server
Error 8 error C2664: 'T &boost::asio::detail::lvref<CompletionHandler>(T)' : cannot convert parameter 1 from 'const boost::packaged_task<R>' to 'boost::packaged_task<R>' C:\Program Files (x86)\Boost-1.47.0\include\boost\asio\impl\io_service.hpp 88 1 cf-server
Error 7 error C2664: 'boost::asio::detail::clvref' : cannot convert parameter 1 from 'const boost::packaged_task<R>' to 'boost::packaged_task<R>' C:\Program Files (x86)\Boost-1.47.0\include\boost\asio\impl\io_service.hpp 88 1 cf-server
沒錯 - [我threads_pool \ task_manager固定它(http://code.google.com/p/cloudobserver/source/browse/trunk/CloudServer/src/cf-util/thread_pool .h?spec = svn1478&r = 1478)我創建了一個bufer函數,通過task()執行任務 – Rella