ThreadPool.h 775 B

1234567891011121314151617181920212223242526272829303132333435
  1. #ifndef THREAD_THREAD_POOL_H
  2. #define THREAD_THREAD_POOL_H
  3. #include <list>
  4. #include <boost/thread.hpp>
  5. #include <boost/function.hpp>
  6. #include <boost/detail/atomic_count.hpp>
  7. #include "Thread/ThreadTypedef.h"
  8. namespace Egametang {
  9. class ThreadPool: private boost::noncopyable
  10. {
  11. private:
  12. int thread_num_;
  13. boost::detail::atomic_count work_num_;
  14. volatile bool running_;
  15. boost::mutex mutex_;
  16. boost::condition_variable cond_;
  17. boost::condition_variable done_;
  18. std::list<ThreadPtr> threads_;
  19. std::list<boost::function<void (void)> > tasks_;
  20. void Runner();
  21. public:
  22. ThreadPool(int num = 0);
  23. ~ThreadPool();
  24. virtual void Start();
  25. virtual void Stop();
  26. virtual bool PushTask(boost::function<void (void)> task);
  27. };
  28. } // namespace Egametang
  29. #endif // THREAD_THREAD_POOL_H