ThreadCompareItemManager.h 2.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869
  1. #ifndef __THREADCOMPAREITEMMANAGER_H__
  2. #define __THREADCOMPAREITEMMANAGER_H__
  3. #include "spdlog/spdlog.h"
  4. #include "FromWebAPI.h"
  5. #include "CompareItemThread.h"
  6. #define CompareItemManager ThreadCompareItemManager::instance()
  7. class ThreadCompareItemManager
  8. {
  9. ThreadCompareItemManager();
  10. ThreadCompareItemManager(const ThreadCompareItemManager&) = delete;
  11. ThreadCompareItemManager& operator=(const ThreadCompareItemManager&) = delete;
  12. public:
  13. ~ThreadCompareItemManager();
  14. static ThreadCompareItemManager& instance()
  15. {
  16. static ThreadCompareItemManager instance;
  17. return instance;
  18. }
  19. /* 线程函数 */
  20. void thread_CompareItemManager();
  21. /* 添加对比项实例 */
  22. void addCompareItemThread(CompareItemThread* pThread);
  23. /* 通过对比项ID和通道ID获取声卡通道信息 */
  24. SoundCardRoadInfo_t getSoundCardRoadInfo(int compareItemID, int roadNum);
  25. /* 给对比项套一层壳,这个函数就是新的线程,在里面new出新的对比项实例,防止Qt报线程归属权错误
  26. 在函数中将对比项实例插入到线程管理器中 */
  27. static void thread_compareItem(CalculateThreadInfo_t threadInfo);
  28. private:
  29. /* 更新基础设置信息,如数据库设置,噪音参数等 */
  30. bool updateBaseSettings();
  31. /* 处理对比项信息,新获取的和已有的对比 */
  32. void processCompareItemInfo(QList<CompareItemInfo_t>& createList,
  33. QList<CompareItemInfo_t>& updateList,
  34. QList<int>& deleteList);
  35. /* 处理需要删除的对比项线程 */
  36. void processDeleteCompareItemThreads(const QList<int>& deleteList);
  37. /* 更新正在运行的线程信息 */
  38. void updateRunningThreads(const QList<CompareItemInfo_t>& updateList);
  39. /* 创建新的线程 */
  40. bool createNewCompareItemThreads(const QList<CompareItemInfo_t>& createList);
  41. private:
  42. std::shared_ptr<spdlog::logger> m_logger = nullptr;
  43. FromWebAPI m_fromWebAPI; /* WebAPI处理类 */
  44. QString m_webAPIUrl; /* WebAPI地址 */
  45. QString m_webAPIID; /* WebAPI ID */
  46. QString m_appType; /* 应用类型 */
  47. std::mutex m_mutexCompareItemThreads; /* 对比项线程的互斥锁 */
  48. QList<CompareItemInfo_t> m_listNewItems; /* 对比项列表,从数据库获取到的新的列表 */
  49. QMap<int, CompareItemThread*> m_mapThreads; /* 对比项线程列表,key是对比项ID,value是对应的线程指针 */
  50. };
  51. #endif