#include #include #include #include #include #include #include #include backEndManager::backEndManager() { _jsonConfiguration = new jsonConfiguration(); _detDataManager = new detDataManager(); _handleAiModelManager = new handleAiModelManager(); _imgSaveThreadManager = new imgSaveThreadManager(this); _triggerManager = new triggerManager(); _cameraManager = new cameraManager(); _threadManager = new threadManager(); } void backEndManager::run() { if(isInit == ReInit) { if (_cameraManager != nullptr) delete _cameraManager; if (_triggerManager != nullptr) delete _triggerManager; _triggerManager = new triggerManager(); _cameraManager = new cameraManager(); isInit = NotInit; } if(isInit == NotInit) { //等待初始化 std::vector> futures;//异步初始化 futures.push_back(std::async(std::launch::async, &threadManager::initialization, _threadManager, this)); futures.push_back(std::async(std::launch::async, &triggerManager::initialization, _triggerManager, this)); futures.push_back(std::async(std::launch::async, &cameraManager::initialization, _cameraManager, this)); futures.push_back(std::async(std::launch::async, &sqlManager::initialization, &_sqlManager, sqlDefaultDatabasePath,true)); futures.push_back(std::async(std::launch::async, &handleAiModelManager::initialization, _handleAiModelManager,this)); for (auto& future : futures) { future.wait(); } _imgSaveThreadManager->start(); _triggerManager->start(); if (_threadManager->initFlag == true) { _threadManager->start(); } if (_triggerManager->initFlag == true && _cameraManager->initFlag == true) { isInit = InitOK; _triggerManager->start(); _cameraManager->start(); } else { isInit = InitFailure; } sendInitFinished(isInit); } } backEndManager::~backEndManager() { _triggerManager->stop(); _cameraManager->stop(); _threadManager->stop(); delete _cameraManager; delete _threadManager; delete _triggerManager; delete _jsonConfiguration; delete _detDataManager; } void backEndManager::startManualDetSlot(cv::Mat* mats, int algoIndex) { std::shared_ptr data = _detDataManager->insertDetData("Manual", "Manual", 0, 1); data->oriImgMutex.lock(); data->oriImgs.push_back(mats->clone()); data->oriImgMutex.unlock(); delete mats; _threadManager->addTask(data);//添加任务 }