BaseCalculateThread.h 1.9 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465
  1. #ifndef _BASECALCULATETHREAD_H_
  2. #define _BASECALCULATETHREAD_H_
  3. #include "spdlog/spdlog.h"
  4. #include "GlobalVariable.h"
  5. /**
  6. * @brief 基础计算线程类
  7. * 1、线程信息更新,更新的新内容先存储起来,等线程的下一次循环再主动更新
  8. * 2、线程停止,m_isRunning设置为false,线程在下一次循环时检查这个标志位,为false时退出
  9. *
  10. */
  11. class BaseCalculateThread
  12. {
  13. public:
  14. BaseCalculateThread(CalculateThreadInfo_t& threadInfo);
  15. virtual ~BaseCalculateThread() = default;
  16. /**
  17. * @brief 线程任务函数,创建线程时会调用此函数
  18. */
  19. virtual void threadTask();
  20. /* 获取线程信息 */
  21. const CalculateThreadInfo_t& getThreadInfo() { return m_threadInfo; }
  22. /* 更新线程信息 */
  23. void updateThreadInfo(const CalculateThreadInfo_t& threadInfo);
  24. /* 停止线程,只设置个停止标志,不阻塞等待 */
  25. virtual void stopThread();
  26. /* 停止线程 */
  27. virtual void stopThreadBlock();
  28. protected:
  29. /**
  30. * @brief 线程运行函数,子类需要实现此函数
  31. */
  32. virtual void task() = 0;
  33. /* 初始化数据 */
  34. virtual bool initData() = 0;
  35. /* 清理数据 */
  36. virtual void clearData() = 0;
  37. /* 更新线程信息 */
  38. bool updateThreadInfoInternal();
  39. protected:
  40. std::shared_ptr<spdlog::logger> m_logger = nullptr; /* 日志记录器 */
  41. std::string m_logBase; /* 日志基础信息 */
  42. std::atomic_bool m_isRunning = true; /* 线程运行标志 */
  43. std::atomic_bool m_isStop = false; /* 线程停止标志 */
  44. CalculateThreadInfo_t m_threadInfo; /* 线程信息 */
  45. std::atomic_bool m_isUpdate = false; /* 是否需要更新线程信息 */
  46. CalculateThreadInfo_t m_threadInfoNew; /* 新的线程信息,用于更新 */
  47. };
  48. #endif // _BASECALCULATETHREAD_H_