#ifndef _BASECALCULATETHREAD_H_ #define _BASECALCULATETHREAD_H_ #include "spdlog/spdlog.h" #include "GlobalVariable.h" /** * @brief 基础计算线程类 * 1、线程信息更新,更新的新内容先存储起来,等线程的下一次循环再主动更新 * 2、线程停止,m_isRunning设置为false,线程在下一次循环时检查这个标志位,为false时退出 * */ class BaseCalculateThread { public: BaseCalculateThread(CalculateThreadInfo_t& threadInfo); virtual ~BaseCalculateThread() = default; /** * @brief 线程任务函数,创建线程时会调用此函数 */ virtual void threadTask(); /* 获取线程信息 */ const CalculateThreadInfo_t& getThreadInfo() { return m_threadInfo; } /* 更新线程信息 */ void updateThreadInfo(const CalculateThreadInfo_t& threadInfo); /* 停止线程,只设置个停止标志,不阻塞等待 */ void stopThread(); /* 停止线程 */ void stopThreadBlock(); protected: /** * @brief 线程运行函数,子类需要实现此函数 */ virtual void task() = 0; /* 初始化数据 */ virtual bool initData() = 0; /* 清理数据 */ virtual void clearData() = 0; /* 更新线程信息 */ bool updateThreadInfoInternal(); protected: std::shared_ptr m_logger = nullptr; /* 日志记录器 */ std::string m_logBase; /* 日志基础信息 */ std::atomic_bool m_isRunning = true; /* 线程运行标志 */ std::atomic_bool m_isStop = false; /* 线程停止标志 */ CalculateThreadInfo_t m_threadInfo; /* 线程信息 */ std::atomic_bool m_isUpdate = false; /* 是否需要更新线程信息 */ CalculateThreadInfo_t m_threadInfoNew; /* 新的线程信息,用于更新 */ }; #endif // _BASECALCULATETHREAD_H_