提交 f8b6233e 编写于 作者: 丁劲犇's avatar 丁劲犇 😸

发送缓冲也采取静态设计

上级 68c44851
......@@ -178,20 +178,20 @@ void taskNode::slot_readyReadStandardOutput()
{
//QByteArray arred = m_process->readAllStandardOutput();
//Size reuse
const qsizetype tailsize = m_array_stdout.size()-m_currsize;
const qsizetype tailsize = m_array_stdout.size()-m_readBufMax;
if (tailsize < total_sz)
{
m_array_stdout.resize(m_currsize + total_sz);
m_array_stdout.resize(m_readBufMax + total_sz);
}
total_sz = m_process->read(m_array_stdout.data()+m_currsize,total_sz);
m_currsize += total_sz;
total_sz = m_process->read(m_array_stdout.data()+m_readBufMax,total_sz);
m_readBufMax += total_sz;
extern QAtomicInt g_totalrev;
g_totalrev += total_sz;
qsizetype startByte = 0;
char * pBufStart = m_array_stdout.data();
while (static_cast<int>(sizeof(TASKBUS::subject_package_header)) + startByte < m_currsize)
while (static_cast<int>(sizeof(TASKBUS::subject_package_header)) + startByte < m_readBufMax)
{
auto * header =
reinterpret_cast<const TASKBUS::subject_package_header *>
......@@ -205,7 +205,7 @@ void taskNode::slot_readyReadStandardOutput()
}
else
{
if (m_currsize >=
if (m_readBufMax >=
startByte + sizeof(TASKBUS::subject_package_header)+header->data_length)
{
++m_spackage_sent;
......@@ -245,10 +245,10 @@ void taskNode::slot_readyReadStandardOutput()
}
}
//Move tail
const int taiBytes = m_currsize - startByte;
const int taiBytes = m_readBufMax - startByte;
if (taiBytes)
memmove(pBufStart,pBufStart+startByte,taiBytes);
m_currsize = taiBytes;
m_readBufMax = taiBytes;
total_sz = m_process->size();
}
......@@ -374,9 +374,13 @@ void taskNode::slot_readyReadStandardError()
bool taskNode::enqueue_write(const char * pack, qsizetype sz)
{
m_mtxPackage.lock();
int z = m_queue.size();
m_queue.push_back(QByteArray(pack,sz));
qsizetype z = m_writeBufMax;
if(m_writeBufMax + sz > m_array_stdin.size())
m_array_stdin.resize(m_writeBufMax + sz);
memcpy(m_array_stdin.data()+m_writeBufMax,pack,sz);
m_writeBufMax += sz;
m_mtxPackage.unlock();
++m_spackage_recieved;
if (!z)
emit sig_new_package();
return true;
......@@ -384,21 +388,13 @@ bool taskNode::enqueue_write(const char * pack, qsizetype sz)
void taskNode::slot_write()
{
m_mtxPackage.lock();
QByteArrayList arr_task = m_queue;
m_queue.clear();
if (m_bDebug)
log_package(false,m_array_stdin.data(),m_writeBufMax);
m_sbytes_recieved += m_array_stdin.size();
if (m_process->state()==QProcess::Running)
m_process->write(m_array_stdin.constData(),m_writeBufMax);
m_writeBufMax = 0;
m_mtxPackage.unlock();
for (auto p=arr_task.begin();p!=arr_task.end();++p)
{
if (m_bDebug)
log_package(false,p->data(),p->size());
++m_spackage_recieved;
m_sbytes_recieved += p->size();
if (m_process->state()==QProcess::Running)
{
m_process->write(*p);
}
}
}
bool taskNode::cmd_sendcmd(QMap<QString,QVariant> cmd, QSet<QString> destins)
{
......
......@@ -60,7 +60,7 @@ private:
taskProject * m_currPrj = nullptr;
//进程缓存
QByteArray m_array_stdout;
qsizetype m_currsize = 0;
qsizetype m_readBufMax = 0;
QByteArrayList m_arr_Strerr;
QByteArrayList m_packBuf;
bool m_bDebug = false;
......@@ -72,8 +72,10 @@ private:
QFile m_dbgfile_stdout;
QFile m_dbgfile_stderr;
QString m_uuid;
//发送队列
QMutex m_mtxPackage;
QList<QByteArray> m_queue;
QByteArray m_array_stdin;
qsizetype m_writeBufMax = 0;
QString dbgdir();
//Call these functions to emit message and packs with bufferring approach.
void emit_message(QByteArray a);
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册