#include "Hd_LogicDll_module.h" Hd_LogicDll_module* create() { qDebug() << __FUNCTION__ << " line:" << __LINE__ << "Hd_CameraModule_readImage create success!"; return new Hd_LogicDll_module; } void destory(Hd_LogicDll_module* ptr) { if (ptr) { delete ptr; ptr = nullptr; } qDebug() << __FUNCTION__ << " line:" << __LINE__ << "Hd_CameraModule_readImage destory success!"; } bool ifRunLogicDll = false; //类创建 Hd_LogicDll_module::Hd_LogicDll_module() { my_task = new Logic_processtask(&dManager,this); sendImgStructMutex = new QMutex; ifRunLogicDll = true; Sleep(10); //无法用信号槽传递图像!! //connect(my_task, SIGNAL(LsendImage(QString, cv::Mat)), this, SLOT(processtask_sendImage(QString, cv::Mat))); // 传递图片 connect(my_task, SIGNAL(LwriteData(QString, QString, QString, QByteArray)), this, SLOT(processtask_writeData(QString, QString, QString, QByteArray)));// 传递数据 connect(my_task, SIGNAL(sendTcpStatus(bool)), this, SLOT(processtask_sendTcpStatus(bool))); connect(my_task, SIGNAL(cameraDisconnect(QString, bool)), this, SLOT(processtask_cameraDisconnect(QString, bool))); QFuturemuf = QtConcurrent::run(this, &Hd_LogicDll_module::check_LsendImgStruct); } void Hd_LogicDll_module::check_LsendImgStruct() { while (ifRunLogicDll) { QQueue< LsendImgStruct> myL; //if (my_task->Lqueue_sendImgStruct.size() > 0) while (my_task->getImageData(myL)) { QMutexLocker locker(sendImgStructMutex); // 加锁 /*sendImgStruct mS; mS.send_Mat = myL.send_Mat; mS.cameraKey_index = myL.cameraKey_index;*/ ////堆积了,只显示最新的 //for (int i = 0; i < queue_sendImgStruct.size(); i++) // if (myL.cameraKey_index == queue_sendImgStruct[i].cameraKey_index) // { // queue_sendImgStruct.removeAt(i); // break; // } for (int i = 0; i < myL.size(); i++) { sendImgStruct mS; mS.send_Mat = myL[i].send_Mat; mS.cameraKey_index = myL[i].cameraKey_index; queue_sendImgStruct.enqueue(mS); } myL.clear(); } Sleep(10); } } bool Hd_LogicDll_module::get_sendImgStruct(QQueue< sendImgStruct>& my_sendImgStruct) { QMutexLocker locker(sendImgStructMutex); if (queue_sendImgStruct.size() > 0) { my_sendImgStruct.append(queue_sendImgStruct);// .dequeue(); queue_sendImgStruct.clear(); return true; } return false; } Hd_LogicDll_module::~Hd_LogicDll_module() { ifRunLogicDll = false; Sleep(100); if (my_task) { delete my_task; my_task = nullptr; } qDebug() << __FUNCTION__ << "line:" << __LINE__ << " delete success!"; } QString currPath; QString json_cfg_file_path; QJsonObject m_jsonObj; //封装为dll,里面读写文件无法实现 //QJsonObject Hd_LogicDll_module::loadJsonCfg(QString) //{ // QJsonObject json_object; // try // { // QJsonParseError jsonError; // if (json_cfg_file_path.isEmpty()) // { // qCritical() << __FUNCTION__ << " line:" << __LINE__ << " JsonPath is null!"; // return json_object; // } // // QFile JsonFile; // JsonFile.setFileName(json_cfg_file_path); // if (!JsonFile.isReadable()) // { // qCritical() << __FUNCTION__ << " line:" << __LINE__ << " camera_cfg.json not isReadable!"; // return json_object; // } // JsonFile.open(QIODevice::ReadOnly); // // QByteArray m_Byte = JsonFile.readAll(); // if (m_Byte.isEmpty()) // { // qDebug() << __FUNCTION__ << " line:" << __LINE__ << json_cfg_file_path + " Content is empty"; // JsonFile.close(); // return json_object; // } // // QJsonDocument jsonDocument(QJsonDocument::fromJson(m_Byte, &jsonError)); // // if (!jsonDocument.isNull() && jsonError.error == QJsonParseError::NoError) // { // if (jsonDocument.isObject()) // { // json_object = jsonDocument.object(); // JsonFile.close(); // return json_object; // } // } // else // { // qCritical() << __FUNCTION__ << " line:" << __LINE__ << json_cfg_file_path + " is error!"; // } // JsonFile.close(); // // } // catch (QString ev) // { // qCritical() << __FUNCTION__ << " line:" << __LINE__ << " ev:" << ev; // } // return json_object; //} bool Hd_LogicDll_module::setJsonObject(QJsonObject m_jsonObj) { qDebug() << __FUNCTION__ << " line: " << __LINE__ << " start! "; QDir dir = QApplication::applicationDirPath(); currPath = dir.path(); json_cfg_file_path = currPath + "/config/camera_cfg.json"; /*m_jsonObj = loadJsonCfg(json_cfg_file_path); if (m_jsonObj.isEmpty()) { qCritical() << __FUNCTION__ << " line:" << __LINE__ << " m_jsonObj is null"; return false; }*/ my_task->setJsonPath(currPath); if (my_task) my_task->setJsonObject(m_jsonObj); else return false; return true; } bool Hd_LogicDll_module::checkJsonObject(QJsonObject m_jsonObj, QString &errMessage) { return my_task->check_cmeraCfg(m_jsonObj, errMessage); } bool Hd_LogicDll_module::stopTask() { if (my_task) return my_task->stopTask(); else return false; return true; } bool Hd_LogicDll_module::initTask() { if (my_task) return my_task->initTask(); else return false; return true; } bool Hd_LogicDll_module::startTask() { if (my_task) return my_task->startTask(); else return false; return true; } bool Hd_LogicDll_module::exitTask() { QMutexLocker locker(sendImgStructMutex); queue_sendImgStruct.clear(); if (my_task) { my_task->disconnect(); return my_task->exitTask(); } else return false; return true; } bool Hd_LogicDll_module::restartTask() { if (my_task) return my_task->restartTask(); else return false; return true; } bool Hd_LogicDll_module::sendPLC(QString cmd) { if (my_task) return my_task->sendPLC(cmd); else return false; return true; } bool Hd_LogicDll_module::reLoadJsonSetParameter(QStringList moduleKeyList) { if (my_task) return my_task->reLoadJsonSetParameter(moduleKeyList); else return false; return true; } void Hd_LogicDll_module::processtask_sendTcpStatus(bool flag) { emit Logic_sendTcpStatus(flag); } void Hd_LogicDll_module::processtask_writeData(QString key, QString cameraName, QString snInfo, QByteArray byteArray) { emit Logic_writeData(key, cameraName, snInfo, byteArray); } void Hd_LogicDll_module::processtask_cameraDisconnect(QString msg, bool status) { emit Logic_cameraDisconnect(msg, status); } void Hd_LogicDll_module::processtask_CommunicationDisconnect(QString msg, bool status) { emit Logic_CommunicationDisconnect(msg, status); }