TaskPool.h 1.1 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152
  1. /**
  2. * 任务池模型,TaskPool.h
  3. * zhangyl 2019.02.14
  4. */
  5. #include <thread>
  6. #include <mutex>
  7. #include <condition_variable>
  8. #include <list>
  9. #include <vector>
  10. #include <memory>
  11. #include <iostream>
  12. class Task
  13. {
  14. public:
  15. virtual void doIt()
  16. {
  17. std::cout << "handle a task..." << std::endl;
  18. }
  19. virtual ~Task()
  20. {
  21. //为了看到一个task的销毁,这里刻意补上其析构函数
  22. std::cout << "a task destructed..." << std::endl;
  23. }
  24. };
  25. class TaskPool final
  26. {
  27. public:
  28. TaskPool();
  29. ~TaskPool();
  30. TaskPool(const TaskPool& rhs) = delete;
  31. TaskPool& operator=(const TaskPool& rhs) = delete;
  32. public:
  33. void init(int threadNum = 5);
  34. void stop();
  35. void addTask(Task* task);
  36. void removeAllTasks();
  37. private:
  38. void threadFunc();
  39. private:
  40. std::list<std::shared_ptr<Task>> m_taskList;
  41. std::mutex m_mutexList;
  42. std::condition_variable m_cv;
  43. bool m_bRunning;
  44. std::vector<std::shared_ptr<std::thread>> m_threads;
  45. };