#include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include class detThreadManager; class algoThread; class subThread; class detDataManager; class triggerManager; class imgSaveThreadManager; class detProcess; class sncodeCls { public: struct snPack { unsigned long long timecode; std::string sn; int startpos; }; QListsnWaittingVec; QListsnResList; std::string snErrorsnError = "snErrNoSn"; int tcpStartPos=0; bool clearSameSnRequestData(); void checkSnFromWaittingVec(QByteArray byte); std::string readSnFromQByteArray(QByteArray byte, int dmPos, bool highLowConversion, bool clearAfterRead, long long timeCode, int Size = -1); QString snHex(QString sn); std::string getData(unsigned long long timeCode); std::string waitForSn(unsigned long long timeCode, int timeOut=1000); sncodeCls(); }; class detThreadManager : public QThread { Q_OBJECT public: using resultHandleCallback = std::function)>; bool initFlag = false; detThreadManager(); ~detThreadManager(); QQueue> detDataQueue; void initialization(detProcess* appCore); void run(); void stop() { runFlag = false; this->terminate(); } void addTask(std::shared_ptr ); sncodeCls snDatas; QMutex queueMutex; QMutex insertQueueMutex; QQueue>insertQueue; void process(); void registerCallback(resultHandleCallback func) { resultHandleCallbacks.push_back(func); } private: std::vector< resultHandleCallback>resultHandleCallbacks; handleAiModelManager* _handleAiModelManager; triggerManager* _triggerManager; imgSaveThreadManager* _imgSaveThreadManager; std::list> waitImgData;//等待图片 std::list> processData;//处理中 std::list> resultData;//等待结果 std::unordered_map> algoFutures; std::unordered_map> resultFutures; std::chrono::seconds zeroSec = std::chrono::seconds(0); std::unordered_map>::iterator futrueIte; void resultHandle(std::shared_ptr ); bool runFlag = true; QList>imgWaitList; std::vector>deleteVec; signals: }; #pragma once