完善了保存信息文件的定义,添加了读写JSON配置文件的代码。身体原因这两天效率不高。

This commit is contained in:
2021-11-18 17:42:14 +08:00
parent b9bece4de9
commit fdffb86c96
10 changed files with 312 additions and 41 deletions

View File

@ -2,6 +2,7 @@
#include "ATPControl_Serial_QT.h" #include "ATPControl_Serial_QT.h"
#include "Logger.h" #include "Logger.h"
#include "ThreadDataGrabber.h" #include "ThreadDataGrabber.h"
#include "SystemConfigger.h"
using namespace std; using namespace std;
#pragma once #pragma once
@ -14,6 +15,11 @@ int main(int argc, char *argv[])
QString qstrTest="This is a test message 2"; QString qstrTest="This is a test message 2";
qDebug() << qstrTest; qDebug() << qstrTest;
cout << "This is a test message"; cout << "This is a test message";
//////////////////////////////////////////////////////////////////////////configger
ZZ_SysConfigger test;
test.Initialize();
test.LoadSettingsFromFile_System();
test.LoadSettings_Test();
//////////////////////////////////////////////////////////////////////////test //////////////////////////////////////////////////////////////////////////test
ZZ_DataGrabberThread m_test; ZZ_DataGrabberThread m_test;
//m_test.GrabOnce(); //m_test.GrabOnce();
@ -24,7 +30,7 @@ int main(int argc, char *argv[])
m_pqDataGrabberThreadHolder->start(); m_pqDataGrabberThreadHolder->start();
m_test.TestGrab(); m_test.TestGrabOnce();
//QThread::msleep(5000); //QThread::msleep(5000);

View File

@ -1,3 +1,6 @@
//////////////////////////////////////////////////////////////////////////
//ATP<54><50><EFBFBD><EFBFBD><E8B1B8><EFBFBD><EFBFBD>ͨ<EFBFBD><CDA8><EFBFBD><EFBFBD>
//////////////////////////////////////////////////////////////////////////
#pragma once #pragma once
#include "pch.h" #include "pch.h"
#include "ZZ_Types.h" #include "ZZ_Types.h"
@ -14,25 +17,38 @@ public:
virtual ~ZZ_ATPControl_Serial_Qt(); virtual ~ZZ_ATPControl_Serial_Qt();
public: public:
//<2F><><EFBFBD>ò<EFBFBD><C3B2><EFBFBD><EFBFBD><EFBFBD>
int SetBaudRate(int iBaud); int SetBaudRate(int iBaud);
//<2F><>ʼ<EFBFBD><CABC><EFBFBD>
int ATPInitialize( ZZ_U8 ucPortNumber); int ATPInitialize( ZZ_U8 ucPortNumber);
//<2F>ر<EFBFBD><D8B1>
int ATPClose(); int ATPClose();
//<2F><><EFBFBD>β<EFBFBD><CEB2>Բɼ<D4B2> <20><><EFBFBD><EFBFBD>ȷ<EFBFBD><C8B7><EFBFBD><EFBFBD><E8B1B8><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
int SingleShot(int &iPixels); int SingleShot(int &iPixels);
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݲɼ<DDB2>
int SingleShot(ATPDataFrame &dfData); int SingleShot(ATPDataFrame &dfData);
//<2F><><EFBFBD>ΰ<EFBFBD><CEB0><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ɼ<EFBFBD>
int SingleShotDark(ATPDataFrame &dfData); int SingleShotDark(ATPDataFrame &dfData);
int SingleShotDeducted(ATPDataFrame &dfData); int SingleShotDeducted(ATPDataFrame &dfData);
//<2F><><EFBFBD><EFBFBD><EFBFBD>ع<EFBFBD>ʱ<EFBFBD><CAB1>
int SetExposureTime(int iExposureTimeInMS); int SetExposureTime(int iExposureTimeInMS);
//<2F><>ȡ<EFBFBD>ع<EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
int GetExposureTime(int &iExposureTimeInMS); int GetExposureTime(int &iExposureTimeInMS);
//int GetWaveLength(float *pfWaveLength); //int GetWaveLength(float *pfWaveLength);
//<2F><>ȡ<EFBFBD><EFBFBD><E8B1B8>Ϣ
int GetDeviceInfo(); int GetDeviceInfo();
//<2F><>ȡ<EFBFBD><EFBFBD><E8B1B8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
int GetDeviceAttribute(); int GetDeviceAttribute();
int GetDeviceListInfo(); //use type name to enum int GetDeviceListInfo(); //use type name to enum
int GetDeviceTemperature(float &fTemperature); int GetDeviceTemperature(float &fTemperature);
//<2F>Զ<EFBFBD><D4B6>ع<EFBFBD>
int PerformAutoExposure(float fMinScaleFactor, float fMaxScaleFactor, float &fPredictedExposureTime); int PerformAutoExposure(float fMinScaleFactor, float fMaxScaleFactor, float &fPredictedExposureTime);
#ifdef _DEBUG #ifdef _DEBUG

View File

@ -1,3 +1,6 @@
//////////////////////////////////////////////////////////////////////////
//<2F><><EFBFBD><EFBFBD>˵<EFBFBD><CBB5><EFBFBD>ļ<EFBFBD>
//////////////////////////////////////////////////////////////////////////
#pragma once #pragma once
#include "pch.h" #include "pch.h"
@ -7,7 +10,7 @@ namespace ZZ_MISCDEF
typedef unsigned short int ZZ_U16; typedef unsigned short int ZZ_U16;
typedef unsigned long int ZZ_U32; typedef unsigned long int ZZ_U32;
//ATPָ<50><D6B8>ת<EFBFBD><D7AA>
namespace ATP namespace ATP
{ {
const int MAX_SPECTRUM_SIZE = 4096; const int MAX_SPECTRUM_SIZE = 4096;
@ -46,6 +49,7 @@ namespace ZZ_MISCDEF
ATP6500 ATP6500
}; };
//<2F><><EFBFBD><EFBFBD>֡<EFBFBD><D6A1><EFBFBD><EFBFBD>
typedef struct tagATPDataFrame typedef struct tagATPDataFrame
{ {
unsigned short usExposureTime; unsigned short usExposureTime;
@ -54,12 +58,14 @@ namespace ZZ_MISCDEF
double dTimes = 0; double dTimes = 0;
}ATPDataFrame; }ATPDataFrame;
//<2F><EFBFBD><E8B1B8>Ϣ<EFBFBD><CFA2><EFBFBD><EFBFBD>
typedef struct tagATPDeviceInfo typedef struct tagATPDeviceInfo
{ {
std::string strPN; std::string strPN;
std::string strSN; std::string strSN;
}ATPDeviceInfo; }ATPDeviceInfo;
//<2F><EFBFBD><E8B1B8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
typedef struct tagATPDeviceAttribute typedef struct tagATPDeviceAttribute
{ {
int iPixels; int iPixels;
@ -74,24 +80,101 @@ namespace ZZ_MISCDEF
} }
//<2F><><EFBFBD>в<EFBFBD><D0B2><EFBFBD>
namespace ZZ_RUNPARAMS
{
typedef struct tagAcquisitionTimeSettings
{
QTime qtStartTime;
QTime qtStopTime;
QTime qtInterval;
}AcqTimeSettings;
typedef struct tagATPCalibrationSettings
{
//Up0 Down1,2,3
QString qsISIF_CalibrationFilePath[4];
QString qsIS1_CalibrationFilePath[4];
}ATPCalibrationSettings;
}
//ϵͳ<CFB5><CDB3><EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD><C4BC>
namespace ZZ_DATAFILE namespace ZZ_DATAFILE
{ {
typedef struct tagEnvironmentalContext typedef struct tagEnvironmentalContext
{ {
QString qstrUTCDateTime;
QString qstrLocation;
QString qstrGPS_longtitude;
QString qstrGPS_Latitude;
QString qstrGPS_Altitude;
QString qstrGPS_North;
QString qstrCaseTemperature;
QString qstrCaseHumidity;
}EContext;
typedef struct tagManmadeEnviromentalContext
{
QString qstrOriFileName;
QString qstrInstallationTime;
QString qstrISIFCalibrationTime;
QString qstrIS1CalibrationTime;
QString qstrNameOfMaintenanceStaff;
QString qstrPhoneNumberOfMaintenanceStaff;
QString qstrDownloadUserID;
QString qstrDownlaodAddress;
QString qstrHTTPServer;
}MEContext;
}EnvironmentalContext;
typedef struct tagIS1Information typedef struct tagIS1Information
{ {
QString qstrSN_ATP;
QString qstrSN_IRIS;
QString qstrCalFile_U0;
QString qstrCalFile_D1;
QString qstrCalFile_D2;
QString qstrCalFile_D3;
int iPixelCount;
int iExposureTimeInMS_U0;
int iExposureTimeInMS_D1;
int iExposureTimeInMS_D2;
int iExposureTimeInMS_D3;
float fTemperature_U0;
float fTemperature_D1;
float fTemperature_D2;
float fTemperature_D3;
}IS1Info; }IS1Info;
typedef struct tagISIFInformation typedef struct tagISIFInformation
{ {
QString qstrSN_ATP;
QString qstrSN_IRIS;
QString qstrCalFile_U0;
QString qstrCalFile_D1;
QString qstrCalFile_D2;
QString qstrCalFile_D3;
int iPixelCount;
int iExposureTimeInMS_U0;
int iExposureTimeInMS_D1;
int iExposureTimeInMS_D2;
int iExposureTimeInMS_D3;
float fTemperature_U0;
float fTemperature_D1;
float fTemperature_D2;
float fTemperature_D3;
}ISIFInfo; }ISIFInfo;
typedef struct tagATPDataHeader typedef struct tagATPDataHeader

View File

@ -2,24 +2,126 @@
ZZ_SysConfigger::ZZ_SysConfigger(QObject *parent /*= nullptr*/) ZZ_SysConfigger::ZZ_SysConfigger(QObject *parent /*= nullptr*/)
{ {
m_qstrFilePath = QCoreApplication::applicationDirPath()+ "/Settings/DeviceSettings.ini"; #ifdef _DEBUG
m_qstrFilePath = QCoreApplication::applicationDirPath() + "home/data/Settings/DeviceSettings.ini";
m_qstrJSONConfigFilePath = QCoreApplication::applicationDirPath() + "/home/data/Settings/config.json";
#else
m_qstrJSONConfigFilePath = ("/home/data/Setting/config.json");
#endif // DEBUG
} }
ZZ_SysConfigger::~ZZ_SysConfigger() ZZ_SysConfigger::~ZZ_SysConfigger()
{ {
if (qfConfig.isOpen())
{
qfConfig.close();
}
} }
int ZZ_SysConfigger::LoadSettings_IS1() int ZZ_SysConfigger::Initialize()
{
qfConfig.setFileName(m_qstrJSONConfigFilePath);
bool bRes = qfConfig.open(QIODevice::ReadOnly);
if (!bRes)
{
qDebug() << "QFile open config file Err.";
return 1;
}
m_qbaJData = qfConfig.readAll();
m_qjdJDoc= QJsonDocument::fromJson(m_qbaJData, &m_qjpeJErr);
if (m_qjpeJErr.error != QJsonParseError::NoError)
{
qDebug() << m_qjpeJErr.errorString();
return 2;
}
m_qjoJObj = m_qjdJDoc.object();
return 0;
}
int ZZ_SysConfigger::LoadSettingsFromFile_IS1()
{ {
return 0; return 0;
} }
int ZZ_SysConfigger::LoadSettings_iSIF() int ZZ_SysConfigger::LoadSettingsFromFile_iSIF()
{ {
return 0; return 0;
} }
int ZZ_SysConfigger::LoadSettings_System() int ZZ_SysConfigger::LoadSettingsFromFile_System()
{ {
// QString qstr = m_qjoJObj.value("IntervalTime").toString();
m_struAcqTime.qtStartTime=QTime::fromString(m_qjoJObj.value("BeginTime").toString(), "hh:mm");
if (!m_struAcqTime.qtStartTime.isValid())
{
qDebug() << "Invalid BeginTime";
return 1;
}
m_struAcqTime.qtInterval = QTime::fromString(m_qjoJObj.value("IntervalTime").toString(), "mm");
if (!m_struAcqTime.qtInterval.isValid())
{
qDebug() << "Invalid BeginTime";
return 1;
}
m_struAcqTime.qtStopTime = QTime::fromString(m_qjoJObj.value("EndTime").toString(), "hh:mm");
if (!m_struAcqTime.qtStopTime.isValid())
{
qDebug() << "Invalid BeginTime";
return 1;
}
return 0; return 0;
} }
int ZZ_SysConfigger::LoadSettingsFromFile_MISC()
{
m_struEC.qstrLocation = m_qjoJObj.value("Location").toString();
m_struEC.qstrGPS_Altitude = m_qjoJObj.value("GPS_Altitude").toString();
m_struEC.qstrGPS_Latitude = m_qjoJObj.value("GPS_Latitude").toString();
m_struEC.qstrGPS_longtitude = m_qjoJObj.value("GPS_Longtitude").toString();
m_struEC.qstrGPS_North = m_qjoJObj.value("GPS_North").toString();
m_struMEC.qstrInstallationTime = m_qjoJObj.value("InstallationTime").toString();
m_struMEC.qstrISIFCalibrationTime = m_qjoJObj.value("ISIFCalibrationTime").toString();
m_struMEC.qstrIS1CalibrationTime = m_qjoJObj.value("IS1CalibrationTime").toString();
m_struMEC.qstrNameOfMaintenanceStaff = m_qjoJObj.value("NameOfMaintenanceStaff").toString();
m_struMEC.qstrPhoneNumberOfMaintenanceStaff = m_qjoJObj.value("PhoneNumberOfMaintenanceStaff").toString();
m_struMEC.qstrDownloadUserID = m_qjoJObj.value("DownloadUserID").toString();
m_struMEC.qstrDownlaodAddress = m_qjoJObj.value("DownlaodAddress").toString();
m_struIS1Info.qstrCalFile_U0 = m_qjoJObj.value("IS1UpCalFile").toString();
m_struIS1Info.qstrCalFile_D1 = m_qjoJObj.value("IS1DownCalFile1").toString();
m_struIS1Info.qstrCalFile_D2 = m_qjoJObj.value("IS1DownCalFile2").toString();
m_struIS1Info.qstrCalFile_D3 = m_qjoJObj.value("IS1DownCalFile3").toString();
m_struISIFInfo.qstrCalFile_U0 = m_qjoJObj.value("SIFUpCalFile").toString();
m_struISIFInfo.qstrCalFile_D1 = m_qjoJObj.value("SIFDownCalFile1").toString();
m_struISIFInfo.qstrCalFile_D2 = m_qjoJObj.value("SIFDownCalFile2").toString();
m_struISIFInfo.qstrCalFile_D3 = m_qjoJObj.value("SIFDownCalFile3").toString();
return 0;
}
int ZZ_SysConfigger::LoadSettings_Test()
{
QFile qfTest(m_qstrJSONConfigFilePath);
qfTest.open(QFile::ReadOnly);
QByteArray qbJData = qfTest.readAll();
QJsonParseError jerr;
QJsonDocument jdoc(QJsonDocument::fromJson(qbJData, &jerr));
if (jerr.error!= QJsonParseError::NoError)
{
qDebug() << jerr.errorString();
}
QJsonObject rootobj = jdoc.object();
QStringList key = rootobj.keys();
QString qtest1 = rootobj.value(rootobj.keys().at(15)).toString();
return 0;
}

View File

@ -1,7 +1,8 @@
#pragma once #pragma once
#include "pch.h" #include "pch.h"
#include "ZZ_Types.h"
using namespace ZZ_MISCDEF::ZZ_RUNPARAMS;
using namespace ZZ_MISCDEF::ZZ_DATAFILE;
class ZZ_SysConfigger :public QObject class ZZ_SysConfigger :public QObject
@ -12,10 +13,31 @@ public:
ZZ_SysConfigger(QObject *parent = nullptr); ZZ_SysConfigger(QObject *parent = nullptr);
virtual ~ZZ_SysConfigger(); virtual ~ZZ_SysConfigger();
public: public:
int LoadSettings_IS1(); int Initialize();
int LoadSettings_iSIF();
int LoadSettings_System();
int LoadSettingsFromFile_IS1();
int LoadSettingsFromFile_iSIF();
int LoadSettingsFromFile_System();
int LoadSettingsFromFile_MISC();
int LoadSettings_Test();
public:
AcqTimeSettings m_struAcqTime;
EContext m_struEC;
MEContext m_struMEC;
IS1Info m_struIS1Info;
ISIFInfo m_struISIFInfo;
private: private:
QString m_qstrFilePath; QString m_qstrFilePath;
QString m_qstrJSONConfigFilePath;
QFile qfConfig;
QByteArray m_qbaJData;
QJsonParseError m_qjpeJErr;
QJsonObject m_qjoJObj;
QJsonDocument m_qjdJDoc;
}; };

View File

@ -9,12 +9,12 @@ ZZ_ATPAbsCtrlThread::~ZZ_ATPAbsCtrlThread()
{ {
} }
//
void ZZ_ATPAbsCtrlThread::SetWaitCondition(QWaitCondition *pFinish, QMutex *pMutex) // void ZZ_ATPAbsCtrlThread::SetWaitCondition(QWaitCondition *pFinish, QMutex *pMutex)
{ // {
m_pwcFinish = pFinish; // m_pwcFinish = pFinish;
m_pMutex = pMutex; // m_pMutex = pMutex;
} // }
int ZZ_ATPAbsCtrlThread::StartTestAcquisition() int ZZ_ATPAbsCtrlThread::StartTestAcquisition()
{ {
@ -27,7 +27,7 @@ int ZZ_ATPAbsCtrlThread::StartTestAcquisition()
} }
qDebug() << "ThreadATPAbsController quit"; qDebug() << "ThreadATPAbsController quit";
m_pwcFinish->wakeAll(); //m_pwcFinish->wakeAll();
emit SignalAcqFinished(0,1); emit SignalAcqFinished(0,1);
return 0; return 0;
} }

View File

@ -1,3 +1,6 @@
//////////////////////////////////////////////////////////////////////////
//ATP<54><EFBFBD><E8B1B8><EFBFBD><EFBFBD>
//////////////////////////////////////////////////////////////////////////
#pragma once #pragma once
#include "pch.h" #include "pch.h"
#include "ATPControl_Serial_QT.h" #include "ATPControl_Serial_QT.h"
@ -12,15 +15,15 @@ public:
public: public:
std::atomic<bool> m_bFlagIsCollecting; std::atomic<bool> m_bFlagIsCollecting;
QMutex *m_pMutex; //QMutex *m_pMutex;
QWaitCondition *m_pwcFinish; //QWaitCondition *m_pwcFinish;
public: public:
ZZ_ATPAbsCtrlThread(QObject* parent = nullptr); ZZ_ATPAbsCtrlThread(QObject* parent = nullptr);
virtual ~ZZ_ATPAbsCtrlThread(); virtual ~ZZ_ATPAbsCtrlThread();
private: private:
ZZ_ATPControl_Serial_Qt m_iSIFctrl; ZZ_ATPControl_Serial_Qt m_iSIFctrl;
public slots: public slots:
virtual void SetWaitCondition(QWaitCondition *pFinish, QMutex *pMutex); //virtual void SetWaitCondition(QWaitCondition *pFinish, QMutex *pMutex);
virtual int StartTestAcquisition(); virtual int StartTestAcquisition();
int StopTestAcquisition(); int StopTestAcquisition();
signals: signals:

View File

@ -3,13 +3,19 @@
ZZ_DataGrabberThread::ZZ_DataGrabberThread(QObject* parent /*= nullptr*/) ZZ_DataGrabberThread::ZZ_DataGrabberThread(QObject* parent /*= nullptr*/)
{ {
m_bFlagIsCollecting = false; m_bFlagIsCollecting = false;
InitThreadStatus();
SetupSignals(); SetupSignals();
StartGrabberThread(); StartGrabberThread();
//m_iTotalThreads = 2;
} }
ZZ_DataGrabberThread::~ZZ_DataGrabberThread() ZZ_DataGrabberThread::~ZZ_DataGrabberThread()
{ {
if (m_piFlagCaptureThreadStatus!=NULL)
{
delete m_piFlagCaptureThreadStatus;
}
} }
int ZZ_DataGrabberThread::SetupSignals() int ZZ_DataGrabberThread::SetupSignals()
@ -17,9 +23,13 @@ int ZZ_DataGrabberThread::SetupSignals()
connect(this, &ZZ_DataGrabberThread::SignalStartGrabOnce, &m_tcISIFCtrlThread, &ZZ_iSIFControlThread::StartTestAcquisition); connect(this, &ZZ_DataGrabberThread::SignalStartGrabOnce, &m_tcISIFCtrlThread, &ZZ_iSIFControlThread::StartTestAcquisition);
connect(this, &ZZ_DataGrabberThread::SignalStartGrabOnce, &m_tcIS1CtrlThread, &ZZ_IS1ControlThread::StartTestAcquisition); connect(this, &ZZ_DataGrabberThread::SignalStartGrabOnce, &m_tcIS1CtrlThread, &ZZ_IS1ControlThread::StartTestAcquisition);
connect(this, &ZZ_DataGrabberThread::SignalStopGrab, &m_tcISIFCtrlThread, &ZZ_iSIFControlThread::StopTestAcquisition, Qt::DirectConnection); //connect(this, &ZZ_DataGrabberThread::SignalStopGrab, &m_tcISIFCtrlThread, &ZZ_iSIFControlThread::StopTestAcquisition, Qt::DirectConnection);
connect(this, &ZZ_DataGrabberThread::SignalStopGrab, &m_tcIS1CtrlThread, &ZZ_IS1ControlThread::StopTestAcquisition, Qt::DirectConnection); //connect(this, &ZZ_DataGrabberThread::SignalStopGrab, &m_tcIS1CtrlThread, &ZZ_IS1ControlThread::StopTestAcquisition, Qt::DirectConnection);
connect(&m_tcISIFCtrlThread, &ZZ_iSIFControlThread::SignalAcqFinished, this, &ZZ_DataGrabberThread::HandleThreadEvent);
connect(&m_tcIS1CtrlThread, &ZZ_IS1ControlThread::SignalAcqFinished, this, &ZZ_DataGrabberThread::HandleThreadEvent);
connect(this, &ZZ_DataGrabberThread::SignalGrabOnceFinished, this, &ZZ_DataGrabberThread::TestGrabOnce);
//m_tcISIFCtrlThread.SetWaitCondition(&m_wcWaitISIF,&m_mTestMutex); //m_tcISIFCtrlThread.SetWaitCondition(&m_wcWaitISIF,&m_mTestMutex);
//m_tcIS1CtrlThread.SetWaitCondition(&m_wcWaitIS1, &m_mTestMutex); //m_tcIS1CtrlThread.SetWaitCondition(&m_wcWaitIS1, &m_mTestMutex);
return 0; return 0;
@ -38,6 +48,16 @@ int ZZ_DataGrabberThread::StartGrabberThread()
return 0; return 0;
} }
int ZZ_DataGrabberThread::InitThreadStatus()
{
m_piFlagCaptureThreadStatus = new int[m_iTotalThreads];
for (int i=0;i< m_iTotalThreads;i++)
{
m_piFlagCaptureThreadStatus[i] = 0;
}
return 0;
}
int ZZ_DataGrabberThread::TestGrab() int ZZ_DataGrabberThread::TestGrab()
{ {
m_bFlagIsCollecting = true; m_bFlagIsCollecting = true;
@ -55,6 +75,12 @@ int ZZ_DataGrabberThread::TestGrab()
return 0; return 0;
} }
int ZZ_DataGrabberThread::TestGrabOnce()
{
emit SignalStartGrabOnce();
return 0;
}
int ZZ_DataGrabberThread::TestStopGrab() int ZZ_DataGrabberThread::TestStopGrab()
{ {
//emit SignalStopGrab(); //emit SignalStopGrab();
@ -64,19 +90,23 @@ int ZZ_DataGrabberThread::TestStopGrab()
return 0; return 0;
} }
int ZZ_DataGrabberThread::handleThreadEvent(int x, int value) int ZZ_DataGrabberThread::HandleThreadEvent(int iThreadID, int iFlagStatus)
{ {
ProcessingThreadAactive[x] = value; m_piFlagCaptureThreadStatus[iThreadID] = iFlagStatus;
// Check if threads are finished bool bFinished = true;
for (int i = 0; i < numThreads; i++) for (int i = 0; i < m_iTotalThreads; i++)
{
if (m_piFlagCaptureThreadStatus[i] != 1)
{ {
bool finished = true; bFinished = false;
if (ProcessingThreadAactive[i] == true) break;
{
finished = false;
// Do end actions here
break;
}
} }
}
if (bFinished)
{
emit SignalGrabOnceFinished();
}
return 0;
} }

View File

@ -1,3 +1,6 @@
//////////////////////////////////////////////////////////////////////////
//<2F><><EFBFBD>ɼ<EFBFBD><C9BC><EFBFBD><EFBFBD><EFBFBD><EFBFBD>߳<EFBFBD>
//////////////////////////////////////////////////////////////////////////
#pragma once #pragma once
#include"pch.h" #include"pch.h"
#include "ThreadIS1Controller.h" #include "ThreadIS1Controller.h"
@ -11,8 +14,8 @@ public:
~ZZ_DataGrabberThread(); ~ZZ_DataGrabberThread();
public: public:
QWaitCondition m_wcWaitISIF,m_wcWaitIS1; //QWaitCondition m_wcWaitISIF,m_wcWaitIS1;
QMutex m_mTestMutex; //QMutex m_mTestMutex;
private: private:
ZZ_iSIFControlThread m_tcISIFCtrlThread; ZZ_iSIFControlThread m_tcISIFCtrlThread;
ZZ_IS1ControlThread m_tcIS1CtrlThread; ZZ_IS1ControlThread m_tcIS1CtrlThread;
@ -20,18 +23,22 @@ private:
QThread* m_pqIS1ThreadHolder; QThread* m_pqIS1ThreadHolder;
std::atomic<bool> m_bFlagIsCollecting; std::atomic<bool> m_bFlagIsCollecting;
std::atomic<bool> m_bFlagIsCollectingFinished;
int *m_piFlagCaptureThreadStatus;
const int m_iTotalThreads = 2;
public: public:
int SetupSignals(); int SetupSignals();
int StartGrabberThread(); int StartGrabberThread();
private: private:
int InitThreadStatus();
public slots: public slots:
int TestGrab(); int TestGrab();
int TestGrabOnce();
int TestStopGrab(); int TestStopGrab();
int handleThreadEvent(int x, int value); int HandleThreadEvent(int iThreadID, int iFlagStatus);
signals: signals:
void SignalStartGrabOnce(); void SignalStartGrabOnce();
void SignalStopGrab(); void SignalStopGrab();
void SignalGrabOnceFinished();
}; };

View File

@ -17,3 +17,5 @@
#include <QJsonObject> #include <QJsonObject>
#include <QJsonValue> #include <QJsonValue>
#include <QJsonParseError> #include <QJsonParseError>
////////////////////////////time
#include <QDateTime>