CAppEnv.cpp 3.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136
  1. #include "../pch/pch.h"
  2. #include "CAppEnv.h"
  3. #include "../print/CPosPrinterQueue.h"
  4. #include "../worker/CChengzhongWorker.h"
  5. #include "../worker/CMqttClientWorker.h"
  6. #include "../worker/CCommonWorker.h"
  7. #include "../worker/CVoiceWorker.h"
  8. #include "../worker/CVideoCaptureWorker.h"
  9. #include "../worker/CDiandanAIShibieWorker.h"
  10. #include "CShuangpingTool.h"
  11. #include "../ai/SQLiteVecManager.h"
  12. CAppEnv::CAppEnv()
  13. {
  14. m_worker_count = 0;
  15. }
  16. CAppEnv::~CAppEnv()
  17. {
  18. }
  19. void CAppEnv::Start()
  20. {
  21. //初始化配置
  22. CSetting::GetInstance()->Init();
  23. //加载YOLO模型
  24. YoloFeatureManager::GetInstance()->loadModel();
  25. //初始化特征数据库
  26. SQLiteVecManager::GetInstance()->initializeDatabase(1280);
  27. //启动打印队列
  28. CPosPrinterQueue::GetInstance()->StartWork();
  29. //启动称重任务
  30. CChengzhongWorker::GetInstance()->StartWork();
  31. //启动声音任务
  32. CVoiceWorker::GetInstance()->Start();
  33. //启动摄像头任务
  34. CVideoCaptureWorker::GetInstance()->Start();
  35. //启动AI识别任务(有2个工作线程)
  36. CDiandanAIShibieWorker::GetInstance()->StartWork();
  37. //启动通用任务
  38. CCommonWorker::GetInstance()->Start();
  39. //初始化副屏
  40. CShuangpingTool::GetInstance()->Init();
  41. }
  42. void CAppEnv::Stop()
  43. {
  44. auto time_1 = std::chrono::high_resolution_clock::now();
  45. //停止打印任务
  46. CPosPrinterQueue::GetInstance()->StopWork();
  47. auto time_2 = std::chrono::high_resolution_clock::now();
  48. //停止称重任务
  49. CChengzhongWorker::GetInstance()->StopWork();
  50. auto time_3 = std::chrono::high_resolution_clock::now();
  51. //停止声音任务
  52. CVoiceWorker::GetInstance()->Stop();
  53. auto time_4 = std::chrono::high_resolution_clock::now();
  54. //停止摄像头任务
  55. CVideoCaptureWorker::GetInstance()->Stop();
  56. auto time_5 = std::chrono::high_resolution_clock::now();
  57. //暂停AI识别任务
  58. CDiandanAIShibieWorker::GetInstance()->StopWork();
  59. auto time_6 = std::chrono::high_resolution_clock::now();
  60. //停止通用任务
  61. CCommonWorker::GetInstance()->Stop();
  62. auto time_7 = std::chrono::high_resolution_clock::now();
  63. //必须等所有工作线程都退出了,才能走到这里,否则可能会有一些线程还在访问已经被销毁的资源,导致崩溃
  64. while (m_worker_count > 0)
  65. {
  66. DEBUG_LOG(L"正在等待工作线程退出,剩余线程数:" + std::to_wstring(m_worker_count));
  67. Sleep(30);
  68. }
  69. auto time_8 = std::chrono::high_resolution_clock::now();
  70. auto duration1 = std::chrono::duration_cast<std::chrono::milliseconds>(time_2 - time_1);
  71. DEBUG_LOG(("打印任务耗时: " + std::to_string(duration1.count()) + " 毫秒").c_str());
  72. auto duration2 = std::chrono::duration_cast<std::chrono::milliseconds>(time_3 - time_2);
  73. DEBUG_LOG(("称重任务耗时: " + std::to_string(duration2.count()) + " 毫秒").c_str());
  74. auto duration3 = std::chrono::duration_cast<std::chrono::milliseconds>(time_4 - time_3);
  75. DEBUG_LOG(("声音任务耗时: " + std::to_string(duration3.count()) + " 毫秒").c_str());
  76. auto duration4 = std::chrono::duration_cast<std::chrono::milliseconds>(time_5 - time_4);
  77. DEBUG_LOG(("摄像头任务耗时: " + std::to_string(duration4.count()) + " 毫秒").c_str());
  78. auto duration5 = std::chrono::duration_cast<std::chrono::milliseconds>(time_6 - time_5);
  79. DEBUG_LOG(("AI识别任务耗时: " + std::to_string(duration5.count()) + " 毫秒").c_str());
  80. auto duration6 = std::chrono::duration_cast<std::chrono::milliseconds>(time_7 - time_6);
  81. DEBUG_LOG(("通用任务耗时: " + std::to_string(duration6.count()) + " 毫秒").c_str());
  82. auto duration7 = std::chrono::duration_cast<std::chrono::milliseconds>(time_8 - time_7);
  83. DEBUG_LOG(("总耗时: " + std::to_string(duration7.count()) + " 毫秒").c_str());
  84. int a = 1;
  85. }
  86. void CAppEnv::AddWorkerNum()
  87. {
  88. std::lock_guard<std::mutex> lock(m_mutex);
  89. m_worker_count++;
  90. }
  91. void CAppEnv::DelWorkerNum()
  92. {
  93. std::lock_guard<std::mutex> lock(m_mutex);
  94. m_worker_count--;
  95. }