1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465 |
- #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);
- /* 停止线程,只设置个停止标志,不阻塞等待 */
- virtual void stopThread();
- /* 停止线程 */
- virtual void stopThreadBlock();
-
- protected:
- /**
- * @brief 线程运行函数,子类需要实现此函数
- */
- virtual void task() = 0;
- /* 初始化数据 */
- virtual bool initData() = 0;
- /* 清理数据 */
- virtual void clearData() = 0;
- /* 更新线程信息 */
- bool updateThreadInfoInternal();
-
- protected:
- std::shared_ptr<spdlog::logger> 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_
|