添加测量gvf数据发送处理

This commit is contained in:
徐海 2026-04-22 11:36:54 +08:00
parent 738f07624c
commit 81cba45eb2
6 changed files with 139 additions and 9 deletions

View File

@ -42,6 +42,11 @@ MeasureSession::MeasureSession(int socket_descriptor, QObject* parent)
{ {
} }
MeasureSession::~MeasureSession()
{
QLOG_DEBUG() << QStringLiteral(u"~MeasureSession");
}
void MeasureSession::run() void MeasureSession::run()
{ {
// 在子线程中创建套接字(关键:必须在当前线程创建) // 在子线程中创建套接字(关键:必须在当前线程创建)

View File

@ -27,6 +27,7 @@ class MeasureSession : public QThread
public: public:
MeasureSession(int socket_descriptor, QObject *parent = nullptr); MeasureSession(int socket_descriptor, QObject *parent = nullptr);
virtual ~MeasureSession();
void run() override; void run() override;

View File

@ -12,6 +12,14 @@
RequstDataProcesser::RequstDataProcesser(QObject *parent) RequstDataProcesser::RequstDataProcesser(QObject *parent)
: QTcpSocket{parent} : QTcpSocket{parent}
{ {
sync_gvf_data_task = new SyncGvfFileDataTask(this);
connect(sync_gvf_data_task, &SyncGvfFileDataTask::syncGvfData, this, &RequstDataProcesser::OnReplayClient/*, Qt::QueuedConnection*/);
connect(this, &RequstDataProcesser::stopSyncGvfFileDataTask, sync_gvf_data_task, &SyncGvfFileDataTask::OnStop);
}
RequstDataProcesser::~RequstDataProcesser()
{
QLOG_DEBUG() << QStringLiteral(u"~RequstDataProcesser");
} }
void RequstDataProcesser::OnReplayClient(const QByteArray& replay_data) void RequstDataProcesser::OnReplayClient(const QByteArray& replay_data)
@ -116,10 +124,7 @@ void RequstDataProcesser::processStartMeasureCmd(const QString& device_guid, con
replay_info = QStringLiteral(u"测量数据GVF文件未找到"); replay_info = QStringLiteral(u"测量数据GVF文件未找到");
} else { } else {
replay_info = measure_data_gvf_filename; replay_info = measure_data_gvf_filename;
SyncGvfFileDataTask* sync_gvf_data_task = new SyncGvfFileDataTask; sync_gvf_data_task->SetGvfFilename(measure_data_gvf_filename);
connect(sync_gvf_data_task, &SyncGvfFileDataTask::finished, sync_gvf_data_task, &SyncGvfFileDataTask::deleteLater);
connect(sync_gvf_data_task, &SyncGvfFileDataTask::syncGvfData, this, &RequstDataProcesser::OnReplayClient);
connect(this, &RequstDataProcesser::stopSyncGvfFileDataTask, sync_gvf_data_task, &SyncGvfFileDataTask::OnStop);
sync_gvf_data_task->start(); sync_gvf_data_task->start();
} }
QByteArray replay_data; QByteArray replay_data;
@ -127,11 +132,7 @@ void RequstDataProcesser::processStartMeasureCmd(const QString& device_guid, con
replay_data_stream << QString("START") << ok << replay_info; replay_data_stream << QString("START") << ok << replay_info;
QMetaObject::invokeMethod(this, "OnReplayClient", Qt::QueuedConnection, Q_ARG(QByteArray, replay_data)); QMetaObject::invokeMethod(this, "OnReplayClient", Qt::QueuedConnection, Q_ARG(QByteArray, replay_data));
} }
sync_gvf_data_task->SetGvfFilename("D:/Workspace/EnergySpectrumAnalyerProject/TestData/GVHD__2025_10_16_16_00_39_653.gvf");
SyncGvfFileDataTask* sync_gvf_data_task = new SyncGvfFileDataTask;
connect(sync_gvf_data_task, &SyncGvfFileDataTask::finished, sync_gvf_data_task, &SyncGvfFileDataTask::deleteLater, Qt::DirectConnection);
connect(sync_gvf_data_task, &SyncGvfFileDataTask::syncGvfData, this, &RequstDataProcesser::OnReplayClient, Qt::QueuedConnection);
connect(this, &RequstDataProcesser::stopSyncGvfFileDataTask, sync_gvf_data_task, &SyncGvfFileDataTask::OnStop, Qt::DirectConnection);
sync_gvf_data_task->start(); sync_gvf_data_task->start();
} }

View File

@ -4,11 +4,14 @@
#include <QObject> #include <QObject>
#include <QTcpSocket> #include <QTcpSocket>
class SyncGvfFileDataTask;
class RequstDataProcesser : public QTcpSocket class RequstDataProcesser : public QTcpSocket
{ {
Q_OBJECT Q_OBJECT
public: public:
explicit RequstDataProcesser(QObject *parent = nullptr); explicit RequstDataProcesser(QObject *parent = nullptr);
virtual ~RequstDataProcesser();
void ProcessRequstData(const QByteArray& requst_data); void ProcessRequstData(const QByteArray& requst_data);
@ -24,6 +27,9 @@ private:
void processSetDeviceMeasureConfigParamsCmd(const QString& device_guid, const QString& cmd_data); void processSetDeviceMeasureConfigParamsCmd(const QString& device_guid, const QString& cmd_data);
void processClearDataCmd( const QString& device_guid); void processClearDataCmd( const QString& device_guid);
void processGetMeasureDeviceListCmd(); void processGetMeasureDeviceListCmd();
private:
SyncGvfFileDataTask* sync_gvf_data_task;
}; };
#endif // REQUSTDATAPROCESSER_H #endif // REQUSTDATAPROCESSER_H

View File

@ -0,0 +1,89 @@
#include "SyncGvfFileDataTask.h"
#include "QsLogManage.h"
#include <QByteArray>
#include <QDataStream>
#include <QDateTime>
#include <QFileInfo>
#include <QSqlDatabase>
#include <QSqlQuery>
#include <QSqlError>
SyncGvfFileDataTask::SyncGvfFileDataTask(QObject *parent)
: QThread{parent}, _b_stop(true)
{
}
SyncGvfFileDataTask::~SyncGvfFileDataTask()
{
_b_stop = true;
if ( this->isRunning() )
this->wait(3000);
QLOG_DEBUG() << QStringLiteral(u"~SyncGvfFileDataTask()");
}
void SyncGvfFileDataTask::SetGvfFilename(const QString &gvf_filename)
{
_gvf_filename = gvf_filename;
}
void SyncGvfFileDataTask::run()
{
if (_gvf_filename.isEmpty()) {
QLOG_WARN() << QStringLiteral(u"没有GVF测量数据文件");
return;
}
QFileInfo gvf_file_info(_gvf_filename);
if (!gvf_file_info.exists()) {
QLOG_WARN() << QStringLiteral(u"GVF测量数据文件%1不存在").arg(_gvf_filename);
return;
}
const QString& connect_name = gvf_file_info.baseName();
if ( QSqlDatabase::contains(connect_name) ) {
QSqlDatabase::removeDatabase(connect_name);
}
QSqlDatabase gvf_db = QSqlDatabase::addDatabase("QSQLITE", connect_name);
gvf_db.setDatabaseName(_gvf_filename);
if (!gvf_db.open()) {
QLOG_WARN() << QStringLiteral(u"打开读取连接失败: %1").arg(gvf_db.lastError().text());
return;
}
quint64 current_process_data_id = 0;
_b_stop = false;
while (!_b_stop) {
QSqlQuery query(gvf_db);
query.exec("SELECT recordnum FROM lmstatisticinfov2");
if (query.last()) {
quint64 record_num = query.value("recordnum").toULongLong();
QLOG_DEBUG() << QStringLiteral(u"测量数据记录总数: %1").arg(record_num);
}
query.exec(QString("SELECT id, data FROM lmdatainfov2 WHERE id > %1").arg(current_process_data_id ));
int data_record_count = 0;
while (bool(!_b_stop) && query.next()) {
quint64 id = query.value("id").toULongLong();
const QByteArray& data = query.value("data").toByteArray();
if (id > current_process_data_id)
current_process_data_id = id;
++data_record_count;
QByteArray gvf_data;
QDataStream replay_data_stream(&gvf_data, QIODevice::Append);
replay_data_stream << QString("GVF") << true << data.size();
replay_data_stream.writeRawData(data.data(), data.size());
QLOG_DEBUG() << QStringLiteral(u"GVFDATA: %1").arg(QString::fromUtf8(data.toHex().toUpper()));
emit syncGvfData(gvf_data);
QThread::sleep(1);
}
query.clear();
query.finish();
}
gvf_db.close();
QSqlDatabase::removeDatabase(connect_name);
QLOG_DEBUG() << QStringLiteral(u"SyncGvfFileDataTask执行完成退出");
}
void SyncGvfFileDataTask::OnStop()
{
_b_stop = true;
QLOG_DEBUG() << QStringLiteral(u"停止SyncGvfFileDataTask");
}

28
src/SyncGvfFileDataTask.h Normal file
View File

@ -0,0 +1,28 @@
#ifndef SYNCGVFFILEDATATASK_H
#define SYNCGVFFILEDATATASK_H
#include <QObject>
#include <QThread>
class SyncGvfFileDataTask : public QThread
{
Q_OBJECT
public:
explicit SyncGvfFileDataTask(QObject *parent = nullptr);
virtual ~SyncGvfFileDataTask();
void SetGvfFilename(const QString& gvf_filename);
void run() override;
public slots:
void OnStop();
signals:
void syncGvfData(const QByteArray& data);
private:
QString _gvf_filename;
bool _b_stop;
};
#endif // SYNCGVFFILEDATATASK_H