Files
handleaiuinew/HanddleAI/HandleAiUi-new/back/threadPoolManager.h
T

105 lines
2.9 KiB
C++
Raw Normal View History

2024-05-18 23:53:26 +08:00
#include <iostream>
#include <qthread.h>
#include <qqueue.h>
#include <qmutex.h>
#include <iomanip>
#include <sstream>
#include <filesystem>
#include <opencv.hpp>
#include <string>
#include <handleAi/handleAiModel.h>
2024-08-07 09:16:35 +00:00
#include <appConfig/sqlManager/sqlManager.h>
2024-05-18 23:53:26 +08:00
#include <QtConcurrent/qtconcurrent>
#include <QMetaType>
2024-08-07 09:16:35 +00:00
#include <simpleTools/fileManager.h>
2024-05-18 23:53:26 +08:00
#include <qtcpserver.h>
#include <qtcpsocket.h>
2024-05-21 18:11:13 +08:00
#include <mutex>
#include <backStruct.h>
2024-05-22 16:47:14 +08:00
#include <memory>
2024-08-07 09:16:35 +00:00
#include <detData.h>
class detThreadManager;
2024-05-18 23:53:26 +08:00
class algoThread;
class subThread;
2024-05-21 23:54:22 +08:00
class detDataManager;
2024-05-27 00:22:42 +08:00
class triggerManager;
2024-08-07 09:16:35 +00:00
class imgSaveThreadManager;
class detProcess;
2024-05-27 00:22:42 +08:00
2024-05-18 23:53:26 +08:00
class sncodeCls
{
public:
struct snPack
{
unsigned long long timecode;
std::string sn;
int startpos;
};
QList<snPack>snWaittingVec;
QList<snPack>snResList;
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();
};
2024-08-07 09:16:35 +00:00
class detThreadManager : public QThread
2024-05-18 23:53:26 +08:00
{
Q_OBJECT
public:
2024-08-07 09:16:35 +00:00
using resultHandleCallback = std::function<void(std::shared_ptr <detData>)>;
bool initFlag = false;
2024-08-07 09:16:35 +00:00
detThreadManager();
~detThreadManager();
2024-05-27 00:22:42 +08:00
2024-05-24 18:05:29 +08:00
QQueue<std::shared_ptr <detData>> detDataQueue;
2024-08-07 09:16:35 +00:00
void initialization(detProcess* appCore);
2024-05-18 23:53:26 +08:00
void run();
2024-05-22 16:47:14 +08:00
void stop()
{
runFlag = false;
this->terminate();
}
2024-08-07 09:16:35 +00:00
2024-05-22 16:47:14 +08:00
void addTask(std::shared_ptr <detData>);
2024-05-18 23:53:26 +08:00
sncodeCls snDatas;
2024-05-23 18:12:43 +08:00
QMutex queueMutex;
QMutex insertQueueMutex;
QQueue<std::shared_ptr <detData>>insertQueue;
2024-05-23 18:12:43 +08:00
void process();
2024-08-07 09:16:35 +00:00
void registerCallback(resultHandleCallback func)
{
resultHandleCallbacks.push_back(func);
}
2024-05-18 23:53:26 +08:00
private:
2024-08-07 09:16:35 +00:00
std::vector< resultHandleCallback>resultHandleCallbacks;
handleAiModelManager* _handleAiModelManager;
triggerManager* _triggerManager;
imgSaveThreadManager* _imgSaveThreadManager;
2024-05-24 18:05:29 +08:00
std::list<std::shared_ptr <detData>> waitImgData;//等待图片
std::list<std::shared_ptr <detData>> processData;//处理中
std::list<std::shared_ptr <detData>> resultData;//等待结果
2024-05-27 00:22:42 +08:00
std::unordered_map<unsigned long long, std::future<bool>> algoFutures;
2024-05-24 18:05:29 +08:00
std::unordered_map<unsigned long long, std::future<void>> resultFutures;
std::chrono::seconds zeroSec = std::chrono::seconds(0);
2024-05-27 00:22:42 +08:00
std::unordered_map<unsigned long long, std::future<bool>>::iterator futrueIte;
2024-08-07 09:16:35 +00:00
void resultHandle(std::shared_ptr <detData>);
2024-05-22 16:47:14 +08:00
bool runFlag = true;
QList<std::shared_ptr <detData>>imgWaitList;
std::vector<std::shared_ptr <detData>>deleteVec;
2024-05-24 18:05:29 +08:00
signals:
2024-05-18 23:53:26 +08:00
};
#pragma once