From 59325796d0b96f6b7a7f201789517648d12ddbd4 Mon Sep 17 00:00:00 2001 From: manjaro-xfce Date: Sat, 24 Jun 2023 21:40:07 +0800 Subject: [PATCH] =?UTF-8?q?=E8=A7=A3=E5=86=B3Linux=E4=B8=8BQt6=20=E7=9A=84?= =?UTF-8?q?=E8=B7=A8=E7=BA=BF=E7=A8=8B=E5=86=B2=E7=AA=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- taskbusplatform/core/tasknode.cpp | 52 ++++++++++++++++++++++++------- taskbusplatform/core/tasknode.h | 7 +++-- 2 files changed, 45 insertions(+), 14 deletions(-) diff --git a/taskbusplatform/core/tasknode.cpp b/taskbusplatform/core/tasknode.cpp index 060617c..ff312db 100644 --- a/taskbusplatform/core/tasknode.cpp +++ b/taskbusplatform/core/tasknode.cpp @@ -39,8 +39,9 @@ taskNode::taskNode(QObject *parent) connect(m_process,&QProcess::bytesWritten,this, &taskNode::slot_sended); connect(this,&taskNode::private_sig_nextcab,this, - &taskNode::slot_readyReadStandardOutput,Qt::QueuedConnection); - m_nBp_TimerID = startTimer(200); + &taskNode::slot_readyReadStandardOutput,Qt::QueuedConnection); + connect(this,&taskNode::sig_new_package,this,&taskNode::slot_write,Qt::QueuedConnection); + m_nBp_TimerID = startTimer(200); } taskNode::~taskNode() { @@ -356,19 +357,46 @@ void taskNode::slot_readyReadStandardError() } bool taskNode::enqueue_write(QByteArray arr) { - m_mtxPackage.lock(); - if (m_bDebug) - log_package(false,arr); - if (m_process->state()==QProcess::Running) - { - m_process->write(arr); - ++m_spackage_recieved; - m_sbytes_recieved += arr.size(); - } - m_mtxPackage.unlock(); +#ifdef WIN32 + m_mtxPackage.lock(); + if (m_bDebug) + log_package(false,arr); + if (m_process->state()==QProcess::Running) + { + m_process->write(arr); + ++m_spackage_recieved; + m_sbytes_recieved += arr.size(); + } + m_mtxPackage.unlock(); +#else + m_mtxPackage.lock(); + int z = m_queue.size(); + m_queue.push_back(arr); + m_mtxPackage.unlock(); + if (!z) + emit sig_new_package(); +#endif return true; } +void taskNode::slot_write() +{ + m_mtxPackage.lock(); + QByteArrayList arr_task = m_queue; + m_queue.clear(); + m_mtxPackage.unlock(); + for (auto p=arr_task.begin();p!=arr_task.end();++p) + { + if (m_bDebug) + log_package(false,*p); + ++m_spackage_recieved; + m_sbytes_recieved += p->size(); + if (m_process->state()==QProcess::Running) + { + m_process->write(*p); + } + } +} bool taskNode::cmd_sendcmd(QMap cmd, QSet destins) { if (destins.contains(m_uuid)==false diff --git a/taskbusplatform/core/tasknode.h b/taskbusplatform/core/tasknode.h index f2ae099..557865d 100644 --- a/taskbusplatform/core/tasknode.h +++ b/taskbusplatform/core/tasknode.h @@ -24,7 +24,7 @@ class taskProject; /*! * \brief The taskNode class 管理一个构件进程的类 * 这个类包含基本的进程启动终止、管道维护 - * A class that manages a component process. This class contains basic process + * A clapush_backss that manages a component process. This class contains basic process * start-up termination, pipeline maintenance */ class taskNode : public QObject @@ -38,6 +38,7 @@ signals: void sig_pro_started(); void sig_pro_stopped(int exitCode, QProcess::ExitStatus exitStatus); void sig_new_command(QMap cmd); + void sig_new_package(); void sig_new_errmsg(QByteArrayList); void sig_iostat(qint64 pid,quint64 pr,quint64 ps,quint64 br, quint64 bs); void private_sig_nextcab(); @@ -51,6 +52,7 @@ private slots: void slot_readyReadStandardOutput(); void slot_readyReadStandardError(); void slot_sended(qint64 ); + void slot_write(); void slot_started( ); void slot_stopped(); private: @@ -69,7 +71,8 @@ private: QFile m_dbgfile_stdout; QFile m_dbgfile_stderr; QString m_uuid; - QMutex m_mtxPackage; + QMutex m_mtxPackage; + QList m_queue; QString dbgdir(); //Call these functions to emit message and packs with bufferring approach. void emit_message(QByteArray a); -- GitLab