添加测量gvf数据发送处理
This commit is contained in:
parent
738f07624c
commit
81cba45eb2
|
|
@ -42,6 +42,11 @@ MeasureSession::MeasureSession(int socket_descriptor, QObject* parent)
|
|||
{
|
||||
}
|
||||
|
||||
MeasureSession::~MeasureSession()
|
||||
{
|
||||
QLOG_DEBUG() << QStringLiteral(u"~MeasureSession");
|
||||
}
|
||||
|
||||
void MeasureSession::run()
|
||||
{
|
||||
// 在子线程中创建套接字(关键:必须在当前线程创建)
|
||||
|
|
|
|||
|
|
@ -27,6 +27,7 @@ class MeasureSession : public QThread
|
|||
|
||||
public:
|
||||
MeasureSession(int socket_descriptor, QObject *parent = nullptr);
|
||||
virtual ~MeasureSession();
|
||||
|
||||
void run() override;
|
||||
|
||||
|
|
|
|||
|
|
@ -12,6 +12,14 @@
|
|||
RequstDataProcesser::RequstDataProcesser(QObject *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)
|
||||
|
|
@ -116,10 +124,7 @@ void RequstDataProcesser::processStartMeasureCmd(const QString& device_guid, con
|
|||
replay_info = QStringLiteral(u"测量数据GVF文件未找到");
|
||||
} else {
|
||||
replay_info = measure_data_gvf_filename;
|
||||
SyncGvfFileDataTask* sync_gvf_data_task = new SyncGvfFileDataTask;
|
||||
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->SetGvfFilename(measure_data_gvf_filename);
|
||||
sync_gvf_data_task->start();
|
||||
}
|
||||
QByteArray replay_data;
|
||||
|
|
@ -127,11 +132,7 @@ void RequstDataProcesser::processStartMeasureCmd(const QString& device_guid, con
|
|||
replay_data_stream << QString("START") << ok << replay_info;
|
||||
QMetaObject::invokeMethod(this, "OnReplayClient", Qt::QueuedConnection, Q_ARG(QByteArray, replay_data));
|
||||
}
|
||||
|
||||
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->SetGvfFilename("D:/Workspace/EnergySpectrumAnalyerProject/TestData/GVHD__2025_10_16_16_00_39_653.gvf");
|
||||
sync_gvf_data_task->start();
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -4,11 +4,14 @@
|
|||
#include <QObject>
|
||||
#include <QTcpSocket>
|
||||
|
||||
class SyncGvfFileDataTask;
|
||||
|
||||
class RequstDataProcesser : public QTcpSocket
|
||||
{
|
||||
Q_OBJECT
|
||||
public:
|
||||
explicit RequstDataProcesser(QObject *parent = nullptr);
|
||||
virtual ~RequstDataProcesser();
|
||||
|
||||
void ProcessRequstData(const QByteArray& requst_data);
|
||||
|
||||
|
|
@ -24,6 +27,9 @@ private:
|
|||
void processSetDeviceMeasureConfigParamsCmd(const QString& device_guid, const QString& cmd_data);
|
||||
void processClearDataCmd( const QString& device_guid);
|
||||
void processGetMeasureDeviceListCmd();
|
||||
|
||||
private:
|
||||
SyncGvfFileDataTask* sync_gvf_data_task;
|
||||
};
|
||||
|
||||
#endif // REQUSTDATAPROCESSER_H
|
||||
|
|
|
|||
89
src/SyncGvfFileDataTask.cpp
Normal file
89
src/SyncGvfFileDataTask.cpp
Normal 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
28
src/SyncGvfFileDataTask.h
Normal 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
|
||||
Loading…
Reference in New Issue
Block a user