00001
00002 #pragma once
00003 #include <boost/asio.hpp>
00004 #include <boost/bind.hpp>
00005 #include <boost/thread.hpp>
00006 #include <boost/scoped_ptr.hpp>
00007 #include <boost/shared_ptr.hpp>
00008
00009 #include <iostream>
00010 #include <vector>
00011 #include <string>
00012
00013 namespace ug {
00014 class ThreadPool
00015 {
00016 typedef boost::asio::io_service service_t;
00017 service_t m_service;
00018 boost::thread_group m_pool;
00019 boost::scoped_ptr<service_t::work> m_busywork;
00020 std::vector<boost::shared_ptr<boost::thread> > m_workers;
00021
00022 public:
00023 ThreadPool(size_t const num_workers);
00024 ~ThreadPool();
00025
00026 template<class callable>
00027 void add(callable& job) { m_service.post(job); }
00028
00029 };
00030 }