#ifndef THREAD_THREAD_POOL_H #define THREAD_THREAD_POOL_H #include #include #include #include #include "Base/Base.h" #include "Thread/ThreadPoolIf.h" namespace Egametang { class ThreadPool: public ThreadPoolIf, private boost::noncopyable { private: int thread_num_; boost::detail::atomic_count work_num_; volatile bool running_; boost::mutex mutex_; boost::condition_variable cond_; boost::condition_variable done_; std::list threads_; std::list > tasks_; void Runner(); public: ThreadPool(int num = 0); ~ThreadPool(); void Start(); void Stop(); bool PushTask(boost::function task); }; } // namespace Egametang #endif // THREAD_THREAD_POOL_H