CompareItemThread.h 3.0 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091
  1. #ifndef _COMPAREITEMTHREAD_H_
  2. #define _COMPAREITEMTHREAD_H_
  3. #include "BaseCalculateThread.h"
  4. #include "CompareResult.h"
  5. #include "AlarmInfo.h"
  6. class CalculateDBThread;
  7. class NoiseDetectThread;
  8. class CompareDoubleThread;
  9. /**
  10. 对比项功能线程
  11. 功能:
  12. 1、对比两个录音通道的数据,通道1是主通道,和其他通道挨个对比
  13. 2、这里处理各个通道的报警信息,写入数据库
  14. 3、从这里开启各个比对线程,获取比对结果信息,并组合
  15. 4、这里创建的线程包含:两两对比线程、音量检测线程,这两个都和对比项相关联
  16. 5、噪音检测线程从线程管理器中获取的,这里不负责创建和销毁
  17. */
  18. class CompareItemThread : public BaseCalculateThread
  19. {
  20. public:
  21. CompareItemThread(CalculateThreadInfo_t& threadInfo);
  22. ~CompareItemThread() override;
  23. protected:
  24. /* 线程功能函数 */
  25. void task() override;
  26. /* 初始化数据 */
  27. bool initData() override;
  28. /* 清理数据 */
  29. void clearData() override;
  30. private:
  31. /* 创建两个对比线程,主通道是第一个通道,其他都需要和主通道进行对比 */
  32. bool createCompareThreads();
  33. /* 销毁两两对比线程 */
  34. void destroyCompareThreads();
  35. /* 创建计算音量报警的线程 */
  36. bool createCalculateDBThreads();
  37. /* 销毁音量计算的线程 */
  38. void destroyCalculateDBThreads();
  39. /* 获取噪音检测的线程 */
  40. bool getNoiseDetectThreads();
  41. /* 移除噪音检测的线程 */
  42. void removeNoiseDetectThreads();
  43. /* 更新数据 */
  44. bool updateResultData();
  45. /* 发送数据 */
  46. void sendResultData();
  47. /* 处理报警数据,写入数据库 */
  48. void processAlarmData();
  49. private:
  50. /* 计算音量信息的线程指针,第一个是主通道线程 */
  51. std::vector<CalculateDBThread*> m_vecCalculateDBThreads;
  52. std::vector<bool> m_vecCDBUpdated; /* 音量包更新标志位 */
  53. /* 计算噪音的线程指针 */
  54. std::vector<NoiseDetectThread*> m_vecNoiseDetectThreads;
  55. /* 对比项信息线程,这个线程在这里创建,不会和其他对比项复用 */
  56. std::vector<CompareDoubleThread*> m_vecCompareDoubleThreads;
  57. /* 计算的数据结果 */
  58. CompareResult_t m_compareResult;
  59. /* 存储报警信息 */
  60. std::vector<AlarmInfo_t> m_vecAlarmSilence; /* 静音报警信息 */
  61. std::vector<AlarmInfo_t> m_vecAlarmOverload; /* 过载报警信息 */
  62. std::vector<AlarmInfo_t> m_vecAlarmPhase; /* 反相报警信息 */
  63. std::vector<AlarmInfo_t> m_vecAlarmSilenceLast; /* 上一次静音报警信息 */
  64. std::vector<AlarmInfo_t> m_vecAlarmOverloadLast; /* 上一次过载报警信息 */
  65. std::vector<AlarmInfo_t> m_vecAlarmPhaseLast; /* 上一次反相报警信息 */
  66. /* 要写入到数据库的报警信息 */
  67. std::list<AlarmInfo_t> m_listAlarm;;
  68. };
  69. #endif // _COMPAREITEMTHREAD_H_