CompareItemThread.h 3.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102
  1. #ifndef _COMPAREITEMTHREAD_H_
  2. #define _COMPAREITEMTHREAD_H_
  3. #include <map>
  4. #include <qt5/QtCore/qchar.h>
  5. #include "BaseCalculateThread.h"
  6. #include "CompareResult.h"
  7. #include "AlarmInfo.h"
  8. #include "FromMQTT.h"
  9. class CalculateDBThread;
  10. class NoiseDetectThread;
  11. class CompareDoubleThread;
  12. /**
  13. 对比项功能线程
  14. 功能:
  15. 1、对比两个录音通道的数据,通道1是主通道,和其他通道挨个对比
  16. 2、这里处理各个通道的报警信息,写入数据库
  17. 3、从这里开启各个比对线程,获取比对结果信息,并组合
  18. 4、这里创建的线程包含:两两对比线程、音量检测线程,这两个都和对比项相关联
  19. 5、噪音检测线程从线程管理器中获取的,这里不负责创建和销毁
  20. */
  21. class CompareItemThread : public BaseCalculateThread
  22. {
  23. public:
  24. CompareItemThread(CalculateThreadInfo_t& threadInfo);
  25. ~CompareItemThread() override;
  26. protected:
  27. /* 线程功能函数 */
  28. void task() override;
  29. /* 初始化数据 */
  30. bool initData() override;
  31. /* 清理数据 */
  32. void clearData() override;
  33. private:
  34. /* 创建两个对比线程,主通道是第一个通道,其他都需要和主通道进行对比 */
  35. bool createCompareThreads();
  36. /* 销毁两两对比线程 */
  37. void destroyCompareThreads();
  38. /* 创建计算音量报警的线程 */
  39. bool createCalculateDBThreads();
  40. /* 销毁音量计算的线程 */
  41. void destroyCalculateDBThreads();
  42. /* 获取噪音检测的线程 */
  43. bool getNoiseDetectThreads();
  44. /* 移除噪音检测的线程 */
  45. void removeNoiseDetectThreads();
  46. /* 更新数据 */
  47. bool updateResultData();
  48. /* 处理报警数据,写入数据库 */
  49. void processAlarmData();
  50. /* 发送数据 */
  51. void sendResultData();
  52. /* 清除标志更新位 */
  53. void clearUpdateFlags();
  54. /* 生成发送至MQTT的JSON数据 */
  55. bool generateMQTTJsonData(const CompareResult_t& compareResult, QByteArray& jsonData);
  56. private:
  57. /* 发送音量包信息到mqtt中 */
  58. FromMQTT* m_pFromMQTT = nullptr;
  59. /* 发布的主题 */
  60. QString m_pubTopic;
  61. /* 计算音量信息的线程指针,第一个是主通道线程,int是对比项中的通道号 */
  62. std::map<int, CalculateDBThread*> m_mapCalculateDBThreads;
  63. std::map<int, bool> m_mapCDBUpdated; /* 音量包更新标志位 */
  64. /* 计算噪音的线程指针 */
  65. std::map<int, NoiseDetectThread*> m_mapNoiseDetectThreads;
  66. /* 对比项信息线程,这个线程在这里创建,不会和其他对比项复用,int是第二路对比通道的编号 */
  67. std::map<int, CompareDoubleThread*> m_mapCompareDoubleThreads;
  68. /* 计算的数据结果 */
  69. CompareResult_t m_compareResult;
  70. /* 存储报警信息 */
  71. std::map<int, AlarmInfo_t> m_mapAlarmSilence; /* 静音报警信息 */
  72. std::map<int, AlarmInfo_t> m_mapAlarmOverload; /* 过载报警信息 */
  73. std::map<int, AlarmInfo_t> m_mapAlarmPhase; /* 反相报警信息 */
  74. std::map<int, AlarmInfo_t> m_mapAlarmSilenceLast; /* 上一次静音报警信息 */
  75. std::map<int, AlarmInfo_t> m_mapAlarmOverloadLast; /* 上一次过载报警信息 */
  76. std::map<int, AlarmInfo_t> m_mapAlarmPhaseLast; /* 上一次反相报警信息 */
  77. /* 要写入到数据库的报警信息 */
  78. std::list<AlarmInfo_t> m_listAlarm;;
  79. };
  80. #endif // _COMPAREITEMTHREAD_H_