UnivThreadBase.h 1.6 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465
  1. #ifndef __UNIVTHREADBASE_H__
  2. #define __UNIVTHREADBASE_H__
  3. #include <atomic>
  4. #include <mutex>
  5. #include "spdlog/spdlog.h"
  6. enum class eThreadState
  7. {
  8. Thread_None = 0,
  9. Thread_INIT,
  10. Thread_RUNNING, /* 线程运行中 */
  11. Thread_STOPPING, /* 线程正在停止 */
  12. Thread_STOPPED, /* 线程已停止 */
  13. Thread_ERROR /* 线程错误 */
  14. };
  15. /* 通用线程基类 */
  16. class UnivThreadBase
  17. {
  18. public:
  19. UnivThreadBase(std::string loggerName);
  20. virtual ~UnivThreadBase();
  21. /* 启动线程 */
  22. virtual void thread_task();
  23. /* 停止线程,阻塞等待线程退出 */
  24. virtual void thread_stop_block();
  25. /* 停止线程,非阻塞 */
  26. virtual void thread_stop();
  27. /* 获取线程状态名称 */
  28. static std::string threadStateString(eThreadState state);
  29. protected:
  30. /* 线程任务 */
  31. virtual void task() = 0;
  32. /* 初始化数据 */
  33. virtual bool initData() = 0;
  34. /* 清理数据 */
  35. virtual void clearData() = 0;
  36. /* 线程延时, 单位毫秒 */
  37. void thread_sleep_ms(int sleepMs);
  38. /* 线程延时, 单位秒 */
  39. void thread_sleep_s(int sleepS);
  40. protected:
  41. std::shared_ptr<spdlog::logger> m_logger = nullptr;
  42. std::atomic_bool m_isRunning; /* 线程是否运行标志 */
  43. std::mutex m_mutex; /* 线程延时等待互斥锁 */
  44. std::condition_variable m_condVar; /* 线程延时等待条件变量 */
  45. std::atomic<eThreadState> m_threadState; /* 线程状态 */
  46. std::string m_logBase;
  47. };
  48. #endif // __UNIVTHREADBASE_H__