ThreadAlarmManager.h 2.0 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192
  1. #ifndef __THREADALARMMANAGER_H__
  2. #define __THREADALARMMANAGER_H__
  3. /**
  4. * @file ThreadAlarmManager.h
  5. * @author your name (you@domain.com)
  6. * @brief
  7. * @version 0.1
  8. * @date 2025-07-19
  9. *
  10. * @copyright Copyright (c) 2025
  11. *
  12. * 处理报警信息
  13. */
  14. #include "FromWebAPI.h"
  15. #include "AlarmInfo.h"
  16. #include "GlobalVariable.h"
  17. #include "spdlog/spdlog.h"
  18. #include <list>
  19. #include <atomic>
  20. #include <memory>
  21. #include <mutex>
  22. /**
  23. * @brief 处理报警信息,所有的报警信息都由这个线程写入数据库
  24. *
  25. */
  26. #define AlarmManager ThreadAlarmManager::instance()
  27. class ThreadAlarmManager
  28. {
  29. ThreadAlarmManager() = default;
  30. ThreadAlarmManager(const ThreadAlarmManager&) = delete;
  31. ThreadAlarmManager& operator=(const ThreadAlarmManager&) = delete;
  32. public:
  33. ~ThreadAlarmManager();
  34. static ThreadAlarmManager& instance()
  35. {
  36. static ThreadAlarmManager instance;
  37. return instance;
  38. }
  39. /* 线程工作函数 */
  40. void thread_task();
  41. /* 停止线程 */
  42. void thread_stop();
  43. void thread_stopBlock();
  44. /* 获取线程状态 */
  45. EThreadState getThreadState() const { return m_threadState; }
  46. /* 添加报警内容 */
  47. void addAlarmInfo(const AlarmInfo_t& alarmInfo);
  48. void addAlarmInfo(const std::list<AlarmInfo_t>& listAlarm);
  49. private:
  50. /* 线程工作函数 */
  51. void task();
  52. /* 初始化数据 */
  53. bool initData();
  54. /* 清理数据 */
  55. void clearData();
  56. private:
  57. std::shared_ptr<spdlog::logger> m_logger = nullptr;
  58. /* 线程基础信息 */
  59. std::atomic_bool m_isRunning = false; /* 线程运行标志位 */
  60. std::atomic_bool m_isStop = false; /* 线程停止标志位 */
  61. EThreadState m_threadState = EThreadState::State_None; /* 线程状态 */
  62. FromWebAPI m_fromWebAPI;
  63. /* 存储报警信息 */
  64. std::mutex m_mutexListAlarm; /* 报警信息列表的互斥锁 */
  65. std::list<AlarmInfo_t> m_listAlarm; /* 报警信息列表 */
  66. };
  67. #endif // __THREADALARMMANAGER_H__