将Tcp客户端程序放入子线程中

LanXin3D
QuShuailong 2 years ago
parent c7db2f7ad4
commit 9288237f10

@ -463,6 +463,11 @@ void CameraControl::capture(const QStringList& serialNumberList)
void CameraControl::flipImg(const cv::Mat& imgSrc, cv::Mat& imgDst, int rotationAngle) void CameraControl::flipImg(const cv::Mat& imgSrc, cv::Mat& imgDst, int rotationAngle)
{ {
if (imgSrc.empty())
{
qWarning() << "imgSrc is empty";
return;
}
switch (rotationAngle) switch (rotationAngle)
{ {
case 90: case 90:

@ -6,15 +6,16 @@ NetControl::NetControl(const QString& configPath, bool bAutoReconnect /* = false
: QObject(parent), : QObject(parent),
m_bAutoReconnect(bAutoReconnect), m_configPath(configPath) m_bAutoReconnect(bAutoReconnect), m_configPath(configPath)
{ {
qRegisterMetaType<QAbstractSocket::SocketError>("QAbstractSocket::SocketError");
initIpAddress(m_configPath);
m_pTimerHeartbeat = new QTimer(this); m_pTimerHeartbeat = new QTimer(this);
connect(m_pTimerHeartbeat, &QTimer::timeout, this, &NetControl::sendHeartbeatPack); connect(m_pTimerHeartbeat, &QTimer::timeout, this, &NetControl::sendHeartbeatPack);
m_pTcpSocket = new QTcpSocket(this); m_pTcpSocket = new QTcpSocket(this);
connect(m_pTcpSocket, SIGNAL(connected()), this, SLOT(onConnected())); connect(m_pTcpSocket, SIGNAL(connected()), this, SLOT(onConnected()));
connect(m_pTcpSocket, SIGNAL(disconnected()), this, SLOT(onDisconnected()));
connect(m_pTcpSocket, SIGNAL(error(QAbstractSocket::SocketError)), connect(m_pTcpSocket, SIGNAL(error(QAbstractSocket::SocketError)),
this, SLOT(onErrorHandler(QAbstractSocket::SocketError))); this, SLOT(onErrorHandler(QAbstractSocket::SocketError)));
connect(m_pTcpSocket, SIGNAL(readyRead()), this, SLOT(onMsgReceived())); connect(m_pTcpSocket, SIGNAL(readyRead()), this, SLOT(onMsgReceived()));
initIpAddress(m_configPath); connect(m_pTcpSocket, SIGNAL(disconnected()), this, SLOT(onDisconnected()));
connectNet(m_szHostIp, m_port); connectNet(m_szHostIp, m_port);
} }
@ -190,7 +191,7 @@ void NetControl::waitForConnected(int msec)
} }
} }
void NetControl::sendMsg(const QString& msg) Q_SLOT void NetControl::onSendMsg(const QString& msg)
{ {
if (m_pTcpSocket->state() != QAbstractSocket::SocketState::ConnectedState) if (m_pTcpSocket->state() != QAbstractSocket::SocketState::ConnectedState)
{ {

@ -25,7 +25,7 @@ public:
public: public:
//void deCodeMsg(QString recInfo); //void deCodeMsg(QString recInfo);
void waitForConnected(int msec); void waitForConnected(int msec);
void sendMsg(const QString& msg); Q_SLOT void onSendMsg(const QString& msg);
private: private:
bool initIpAddress(const QString& path); bool initIpAddress(const QString& path);
@ -47,6 +47,7 @@ private:
QString m_configPath; QString m_configPath;
int m_heartInterval{ 5 }; int m_heartInterval{ 5 };
//QThread* m_pThread;
QTimer* m_pTimerHeartbeat; QTimer* m_pTimerHeartbeat;
signals: signals:
void sgReceiveData(const QString& data); void sgReceiveData(const QString& data);

@ -38,6 +38,9 @@ SmokeBoxIdentification::SmokeBoxIdentification(QWidget *parent)
} }
QString filePath = applicationDirPath + NET_CONFIG; QString filePath = applicationDirPath + NET_CONFIG;
m_pNetControl = new NetControl(filePath, true); m_pNetControl = new NetControl(filePath, true);
m_pTcpClientThread = new QThread();
m_pNetControl->moveToThread(m_pTcpClientThread);
m_pTcpClientThread->start();
connect(m_pNetControl, &NetControl::sgReceiveData, this, &SmokeBoxIdentification::onDecodeMsg); connect(m_pNetControl, &NetControl::sgReceiveData, this, &SmokeBoxIdentification::onDecodeMsg);
ADModule::instance()->loadParameters(filePath); ADModule::instance()->loadParameters(filePath);
filePath = applicationDirPath + COM_CONFIG; filePath = applicationDirPath + COM_CONFIG;
@ -68,7 +71,8 @@ SmokeBoxIdentification::SmokeBoxIdentification(QWidget *parent)
connect(ADModule::instance(), &ADModule::sgNewNumData, this, &SmokeBoxIdentification::onNewNumData); connect(ADModule::instance(), &ADModule::sgNewNumData, this, &SmokeBoxIdentification::onNewNumData);
//connect(this, &SmokeBoxIdentification::sgSendData2AndAlgo, ADModule::instance(), &ADModule::onSendData2Algo); //connect(this, &SmokeBoxIdentification::sgSendData2AndAlgo, ADModule::instance(), &ADModule::onSendData2Algo);
//connect(this, &SmokeBoxIdentification::sgSaveSensorData2Local, ADModule::instance(), &ADModule::onSaveData2File); //connect(this, &SmokeBoxIdentification::sgSaveSensorData2Local, ADModule::instance(), &ADModule::onSaveData2File);
connect(this, &SmokeBoxIdentification::sgSendStockCheckMsg, this, &SmokeBoxIdentification::onSendStockCheckResults, Qt::QueuedConnection); //connect(this, &SmokeBoxIdentification::sgSendResults, this, &SmokeBoxIdentification::onSendResults);
connect(this, &SmokeBoxIdentification::sgSendMsg, m_pNetControl, &NetControl::onSendMsg, Qt::QueuedConnection);
connect(ui.action_templateNum, SIGNAL(triggered()), this, SLOT(onActionClicked())); connect(ui.action_templateNum, SIGNAL(triggered()), this, SLOT(onActionClicked()));
emit sgControlSideLight(lightCtrl::emTurnOnLight); emit sgControlSideLight(lightCtrl::emTurnOnLight);
} }
@ -78,6 +82,12 @@ SmokeBoxIdentification::~SmokeBoxIdentification()
emit sgControlSideLight(lightCtrl::emTurnOffLight); emit sgControlSideLight(lightCtrl::emTurnOffLight);
DELETE_POINTER(m_pNetControl); DELETE_POINTER(m_pNetControl);
DELETE_POINTER(m_pCategoryMatcher); DELETE_POINTER(m_pCategoryMatcher);
if (m_pTcpClientThread)
{
m_pTcpClientThread->quit();
m_pTcpClientThread->wait();
m_pTcpClientThread = nullptr;
}
} }
Q_SLOT void SmokeBoxIdentification::onActionClicked() Q_SLOT void SmokeBoxIdentification::onActionClicked()
@ -170,11 +180,11 @@ Q_SLOT void SmokeBoxIdentification::onCapturedImage(const QVector<ImageInfo>& ve
saveImage(vecImageInfo, m_workMode); saveImage(vecImageInfo, m_workMode);
if (m_workMode == WorkMode::StockCheck) if (m_workMode == WorkMode::StockCheck)
{ {
emit sgSendStockCheckMsg(MsgType::DataCollectionEndSC); sendResults(MsgType::DataCollectionEndSC);
} }
else if (m_workMode = WorkMode::IntoStock) else if (m_workMode = WorkMode::IntoStock)
{ {
emit sgSendStockCheckMsg(MsgType::IntoStockResult); sendResults(MsgType::IntoStockResult);
} }
m_workMode = WorkMode::Idle; m_workMode = WorkMode::Idle;
}); });
@ -323,7 +333,7 @@ Q_SLOT void SmokeBoxIdentification::onNumStatistic(QString typeNum)
{ {
m_currtStockCheckInfo.smokeQuantityRlt = "0"; m_currtStockCheckInfo.smokeQuantityRlt = "0";
m_currtStockCheckInfo.correctness = false; m_currtStockCheckInfo.correctness = false;
emit sgSendStockCheckMsg(MsgType::StockCheckResult); sendResults(MsgType::StockCheckResult);
} }
else else
{ {
@ -359,7 +369,7 @@ Q_SLOT void SmokeBoxIdentification::onNumStatistic(QString typeNum)
m_currtStockCheckInfo.smokeQuantityRlt = QString::number(matchLabel); m_currtStockCheckInfo.smokeQuantityRlt = QString::number(matchLabel);
m_currtStockCheckInfo.correctness = true; m_currtStockCheckInfo.correctness = true;
} }
emit sgSendStockCheckMsg(MsgType::StockCheckResult); sendResults(MsgType::StockCheckResult);
}); });
} }
else else
@ -367,13 +377,13 @@ Q_SLOT void SmokeBoxIdentification::onNumStatistic(QString typeNum)
qWarning() << "Template folder not find: " << smokeCnName; qWarning() << "Template folder not find: " << smokeCnName;
m_currtStockCheckInfo.smokeQuantityRlt = "0"; m_currtStockCheckInfo.smokeQuantityRlt = "0";
m_currtStockCheckInfo.correctness = false; m_currtStockCheckInfo.correctness = false;
emit sgSendStockCheckMsg(MsgType::StockCheckResult); sendResults(MsgType::StockCheckResult);
} }
} }
} }
} }
void SmokeBoxIdentification::onSendStockCheckResults(int mode) void SmokeBoxIdentification::sendResults(int mode)
{ {
QString resultInfoMsg; QString resultInfoMsg;
switch (mode) switch (mode)
@ -412,7 +422,7 @@ void SmokeBoxIdentification::onSendStockCheckResults(int mode)
default: default:
break; break;
} }
m_pNetControl->sendMsg(resultInfoMsg); emit sgSendMsg(resultInfoMsg);
qDebug() << "send msg: " << resultInfoMsg; qDebug() << "send msg: " << resultInfoMsg;
} }
@ -555,7 +565,7 @@ Q_SLOT void SmokeBoxIdentification::onSendEmptyCheckResults(const QMap<QString,
emptyResult.append(EMPTY_CHECK_HEAD).append(SPLIT_RULE).append(m_currtEmptyCheckInfo.streetName) emptyResult.append(EMPTY_CHECK_HEAD).append(SPLIT_RULE).append(m_currtEmptyCheckInfo.streetName)
.append(SPLIT_RULE).append(m_currtEmptyCheckInfo.taskNum).append(SPLIT_RULE).append(emptyAll) .append(SPLIT_RULE).append(m_currtEmptyCheckInfo.taskNum).append(SPLIT_RULE).append(emptyAll)
.append(END_SYMBOL); .append(END_SYMBOL);
m_pNetControl->sendMsg(emptyResult); emit sgSendMsg(emptyResult);
qDebug() << "send msg: " << emptyResult; qDebug() << "send msg: " << emptyResult;
} }

@ -102,12 +102,12 @@ signals:
//void sgSaveSensorData2Local(QString filePath); //void sgSaveSensorData2Local(QString filePath);
void sgNumDataCollectStart(int sideId); void sgNumDataCollectStart(int sideId);
void sgNumDataCollectStop(); void sgNumDataCollectStop();
void sgSendStockCheckMsg(int mode); //void sgSendResults(int mode);
void sgStartEmptyPlaceCheck(QString streetName); void sgStartEmptyPlaceCheck(QString streetName);
void sgStopEmptyPlaceCheck(); void sgStopEmptyPlaceCheck();
void sgControlSideLight(int); void sgControlSideLight(int);
void sgSendMsg(QString msg);
private: private:
Q_SLOT void onSendStockCheckResults(int mode);
Q_SLOT void onDecodeMsg(const QString& msg); Q_SLOT void onDecodeMsg(const QString& msg);
Q_SLOT void onCapturedImage(const QVector<ImageInfo>& vecImageInfo, int camearLocation); Q_SLOT void onCapturedImage(const QVector<ImageInfo>& vecImageInfo, int camearLocation);
@ -120,6 +120,7 @@ private:
Q_SLOT void onSendEmptyCheckResults(const QMap<QString, int>&); Q_SLOT void onSendEmptyCheckResults(const QMap<QString, int>&);
Q_SLOT void onNewNumData(const QVector<QVector<double>>& vec, const QVector<QString>& strVec, int side); Q_SLOT void onNewNumData(const QVector<QVector<double>>& vec, const QVector<QString>& strVec, int side);
void sendResults(int mode);
void saveData2File(const QVector<QString>& strVec, QString folderPath, int side); void saveData2File(const QVector<QString>& strVec, QString folderPath, int side);
void captureTop(); void captureTop();
void captureSide(); void captureSide();
@ -150,6 +151,7 @@ private:
EmptyCheckInfo m_currtEmptyCheckInfo; EmptyCheckInfo m_currtEmptyCheckInfo;
QNumTemplateBuild* m_pNumTemplateBuild{ nullptr }; QNumTemplateBuild* m_pNumTemplateBuild{ nullptr };
QThread* m_pTcpClientThread;
//QLabel* m_pShowRltImgLabel; //QLabel* m_pShowRltImgLabel;
Ui::SmokeBoxIdentificationClass ui; Ui::SmokeBoxIdentificationClass ui;
}; };

@ -145,6 +145,10 @@
<QtMoc Include="..\..\src\CategoryMatcher.h" /> <QtMoc Include="..\..\src\CategoryMatcher.h" />
</ItemGroup> </ItemGroup>
<ItemGroup> <ItemGroup>
<QtMoc Include="TypeAndNumbberCheckTaskThread.h">
<IncludePath Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">.\GeneratedFiles;.;.\..\..\src;.\..\..\src\libzkq;.\..\..\src\lpSerial;.\..\..\src\lpSerial\include;.\..\..\src\numStatisticAlgo;.\..\..\src\MVCameraDriver;.\..\..\src\common;.\..\..\src\lpv;.\..\..\3rdparty\opencv\include;.\..\..\3rdparty\opencv\include\opencv;.\..\..\3rdparty\opencv\include\opencv2;$(QTDIR)\include;.\GeneratedFiles\$(ConfigurationName);$(QTDIR)\include\QtCore;$(QTDIR)\include\QtGui;$(QTDIR)\include\QtNetwork;$(QTDIR)\include\QtSerialPort;$(QTDIR)\include\QtWebSockets;$(QTDIR)\include\QtWidgets;$(QTDIR)\include\QtWinExtras;$(QTDIR)\include\QtXlsx</IncludePath>
<IncludePath Condition="'$(Configuration)|$(Platform)'=='Release|x64'">.\GeneratedFiles;.;.\..\..\src;.\..\..\src\libzkq;.\..\..\src\lpSerial;.\..\..\src\lpSerial\include;.\..\..\src\numStatisticAlgo;.\..\..\src\MVCameraDriver;.\..\..\src\common;.\..\..\src\lpv;.\..\..\3rdparty\opencv\include;.\..\..\3rdparty\opencv\include\opencv;.\..\..\3rdparty\opencv\include\opencv2;$(QTDIR)\include;.\GeneratedFiles\$(ConfigurationName);$(QTDIR)\include\QtCore;$(QTDIR)\include\QtGui;$(QTDIR)\include\QtNetwork;$(QTDIR)\include\QtSerialPort;$(QTDIR)\include\QtWebSockets;$(QTDIR)\include\QtWidgets;$(QTDIR)\include\QtWinExtras;$(QTDIR)\include\QtXlsx</IncludePath>
</QtMoc>
<QtMoc Include="..\..\src\CodeScanStation.h"> <QtMoc Include="..\..\src\CodeScanStation.h">
<IncludePath Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">.\GeneratedFiles;.;.\..\..\src;.\..\..\src\libzkq;.\..\..\src\lpSerial;.\..\..\src\lpSerial\include;.\..\..\src\numStatisticAlgo;.\..\..\src\MVCameraDriver;.\..\..\src\common;.\..\..\src\lpv;.\..\..\3rdparty\opencv\include;.\..\..\3rdparty\opencv\include\opencv;.\..\..\3rdparty\opencv\include\opencv2;$(QTDIR)\include;.\GeneratedFiles\$(ConfigurationName);$(QTDIR)\include\QtCore;$(QTDIR)\include\QtGui;$(QTDIR)\include\QtNetwork;$(QTDIR)\include\QtSerialPort;$(QTDIR)\include\QtWebSockets;$(QTDIR)\include\QtWidgets;$(QTDIR)\include\QtWinExtras;$(QTDIR)\include\QtXlsx</IncludePath> <IncludePath Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">.\GeneratedFiles;.;.\..\..\src;.\..\..\src\libzkq;.\..\..\src\lpSerial;.\..\..\src\lpSerial\include;.\..\..\src\numStatisticAlgo;.\..\..\src\MVCameraDriver;.\..\..\src\common;.\..\..\src\lpv;.\..\..\3rdparty\opencv\include;.\..\..\3rdparty\opencv\include\opencv;.\..\..\3rdparty\opencv\include\opencv2;$(QTDIR)\include;.\GeneratedFiles\$(ConfigurationName);$(QTDIR)\include\QtCore;$(QTDIR)\include\QtGui;$(QTDIR)\include\QtNetwork;$(QTDIR)\include\QtSerialPort;$(QTDIR)\include\QtWebSockets;$(QTDIR)\include\QtWidgets;$(QTDIR)\include\QtWinExtras;$(QTDIR)\include\QtXlsx</IncludePath>
<IncludePath Condition="'$(Configuration)|$(Platform)'=='Release|x64'">.\GeneratedFiles;.;.\..\..\src;.\..\..\src\libzkq;.\..\..\src\lpSerial;.\..\..\src\lpSerial\include;.\..\..\src\numStatisticAlgo;.\..\..\src\MVCameraDriver;.\..\..\src\common;.\..\..\src\lpv;.\..\..\3rdparty\opencv\include;.\..\..\3rdparty\opencv\include\opencv;.\..\..\3rdparty\opencv\include\opencv2;$(QTDIR)\include;.\GeneratedFiles\$(ConfigurationName);$(QTDIR)\include\QtCore;$(QTDIR)\include\QtGui;$(QTDIR)\include\QtNetwork;$(QTDIR)\include\QtSerialPort;$(QTDIR)\include\QtWebSockets;$(QTDIR)\include\QtWidgets;$(QTDIR)\include\QtWinExtras;$(QTDIR)\include\QtXlsx</IncludePath> <IncludePath Condition="'$(Configuration)|$(Platform)'=='Release|x64'">.\GeneratedFiles;.;.\..\..\src;.\..\..\src\libzkq;.\..\..\src\lpSerial;.\..\..\src\lpSerial\include;.\..\..\src\numStatisticAlgo;.\..\..\src\MVCameraDriver;.\..\..\src\common;.\..\..\src\lpv;.\..\..\3rdparty\opencv\include;.\..\..\3rdparty\opencv\include\opencv;.\..\..\3rdparty\opencv\include\opencv2;$(QTDIR)\include;.\GeneratedFiles\$(ConfigurationName);$(QTDIR)\include\QtCore;$(QTDIR)\include\QtGui;$(QTDIR)\include\QtNetwork;$(QTDIR)\include\QtSerialPort;$(QTDIR)\include\QtWebSockets;$(QTDIR)\include\QtWidgets;$(QTDIR)\include\QtWinExtras;$(QTDIR)\include\QtXlsx</IncludePath>

@ -120,6 +120,9 @@
<QtMoc Include="..\..\src\CodeScanStation.h"> <QtMoc Include="..\..\src\CodeScanStation.h">
<Filter>Header Files</Filter> <Filter>Header Files</Filter>
</QtMoc> </QtMoc>
<QtMoc Include="TypeAndNumbberCheckTaskThread.h">
<Filter>Header Files</Filter>
</QtMoc>
</ItemGroup> </ItemGroup>
<ItemGroup> <ItemGroup>
<ClInclude Include="..\..\src\common\log.h"> <ClInclude Include="..\..\src\common\log.h">

Loading…
Cancel
Save