| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136 |
- #include "../pch/pch.h"
- #include "CAppEnv.h"
- #include "../print/CPosPrinterQueue.h"
- #include "../worker/CChengzhongWorker.h"
- #include "../worker/CMqttClientWorker.h"
- #include "../worker/CCommonWorker.h"
- #include "../worker/CVoiceWorker.h"
- #include "../worker/CVideoCaptureWorker.h"
- #include "../worker/CDiandanAIShibieWorker.h"
- #include "CShuangpingTool.h"
- #include "../ai/SQLiteVecManager.h"
- CAppEnv::CAppEnv()
- {
- m_worker_count = 0;
- }
- CAppEnv::~CAppEnv()
- {
- }
- void CAppEnv::Start()
- {
- //初始化配置
- CSetting::GetInstance()->Init();
- //加载YOLO模型
- YoloFeatureManager::GetInstance()->loadModel();
- //初始化特征数据库
- SQLiteVecManager::GetInstance()->initializeDatabase(1280);
- //启动打印队列
- CPosPrinterQueue::GetInstance()->StartWork();
- //启动称重任务
- CChengzhongWorker::GetInstance()->StartWork();
- //启动声音任务
- CVoiceWorker::GetInstance()->Start();
- //启动摄像头任务
- CVideoCaptureWorker::GetInstance()->Start();
- //启动AI识别任务(有2个工作线程)
- CDiandanAIShibieWorker::GetInstance()->StartWork();
- //启动通用任务
- CCommonWorker::GetInstance()->Start();
- //初始化副屏
- CShuangpingTool::GetInstance()->Init();
- }
- void CAppEnv::Stop()
- {
- auto time_1 = std::chrono::high_resolution_clock::now();
- //停止打印任务
- CPosPrinterQueue::GetInstance()->StopWork();
- auto time_2 = std::chrono::high_resolution_clock::now();
- //停止称重任务
- CChengzhongWorker::GetInstance()->StopWork();
- auto time_3 = std::chrono::high_resolution_clock::now();
- //停止声音任务
- CVoiceWorker::GetInstance()->Stop();
- auto time_4 = std::chrono::high_resolution_clock::now();
- //停止摄像头任务
- CVideoCaptureWorker::GetInstance()->Stop();
- auto time_5 = std::chrono::high_resolution_clock::now();
- //暂停AI识别任务
- CDiandanAIShibieWorker::GetInstance()->StopWork();
- auto time_6 = std::chrono::high_resolution_clock::now();
- //停止通用任务
- CCommonWorker::GetInstance()->Stop();
- auto time_7 = std::chrono::high_resolution_clock::now();
- //必须等所有工作线程都退出了,才能走到这里,否则可能会有一些线程还在访问已经被销毁的资源,导致崩溃
- while (m_worker_count > 0)
- {
- DEBUG_LOG(L"正在等待工作线程退出,剩余线程数:" + std::to_wstring(m_worker_count));
- Sleep(30);
- }
- auto time_8 = std::chrono::high_resolution_clock::now();
- auto duration1 = std::chrono::duration_cast<std::chrono::milliseconds>(time_2 - time_1);
- DEBUG_LOG(("打印任务耗时: " + std::to_string(duration1.count()) + " 毫秒").c_str());
- auto duration2 = std::chrono::duration_cast<std::chrono::milliseconds>(time_3 - time_2);
- DEBUG_LOG(("称重任务耗时: " + std::to_string(duration2.count()) + " 毫秒").c_str());
- auto duration3 = std::chrono::duration_cast<std::chrono::milliseconds>(time_4 - time_3);
- DEBUG_LOG(("声音任务耗时: " + std::to_string(duration3.count()) + " 毫秒").c_str());
- auto duration4 = std::chrono::duration_cast<std::chrono::milliseconds>(time_5 - time_4);
- DEBUG_LOG(("摄像头任务耗时: " + std::to_string(duration4.count()) + " 毫秒").c_str());
- auto duration5 = std::chrono::duration_cast<std::chrono::milliseconds>(time_6 - time_5);
- DEBUG_LOG(("AI识别任务耗时: " + std::to_string(duration5.count()) + " 毫秒").c_str());
- auto duration6 = std::chrono::duration_cast<std::chrono::milliseconds>(time_7 - time_6);
- DEBUG_LOG(("通用任务耗时: " + std::to_string(duration6.count()) + " 毫秒").c_str());
- auto duration7 = std::chrono::duration_cast<std::chrono::milliseconds>(time_8 - time_7);
- DEBUG_LOG(("总耗时: " + std::to_string(duration7.count()) + " 毫秒").c_str());
- int a = 1;
- }
- void CAppEnv::AddWorkerNum()
- {
- std::lock_guard<std::mutex> lock(m_mutex);
- m_worker_count++;
- }
- void CAppEnv::DelWorkerNum()
- {
- std::lock_guard<std::mutex> lock(m_mutex);
- m_worker_count--;
- }
|