具有多任务处理功能的JSON

问题描述 投票:0回答:1

我是Qt C ++开发的新手。我有一个控制硬件的处理器。从服务器(Java)我将指令发送到该硬件。根据该特定指令,它将执行。这是我项目的总体思路。

船上写有基本控制指令。现在我想要什么,我将要描述的问题是什么?抱歉我的英语不好。

我将从服务器发送JSON字符串。例如

working|pq|0|1

从Web套接字我将收到字符串

else if(message.contains("working")) { 
         emit OnMsgRecievedConnect("connect"); 
         workingpq = message;
         qDebug() << workingpq;
}

现在我收到了服务器的字符串。我已将该字符串带入另一个线程以向硬件发出指令。

workingvaluepq = EchoClient::workingpq ;
qDebug() << "End pq value Received from server :" << workingvaluepq ;

QStringList pq = workingvaluepq.split("|");

int pqSize = pq.size(); // get the pq list size;
qDebug() << "End pq size :" << pqSize;

if(pqSize == 5){
     p = pq[3];
     q = pq[4];
  }

int pInt = p.toInt(&ok);
int qInt = q.toInt(&ok);

if(!ok && pqSize == 5){
    pend = pInt;
}

if(!ok && pqSize == 5){
    qend = qInt;
}

    pend = pInt;
    qend = qInt;

if(pqSize == 1 ){
    pend = jread->endvaluep;
    qend = jread->endvalueq;
}

while(true)
{      (All other stuff here)

   if(pqSize == 5){
            if (pend == pstart && qend == qstart)
            {
                Jsonendflag = 1;
            }
        }

   if(pqSize == 1){
            if (pend == pstart && qend == qstart)
            {
                Rightstopflag = 1;
            }
        }

因此,当这一点(无论我们修复了什么)达到特定任务时,最终它将停止。也许上面的代码有一些经验问题。所以一个人可以帮助我改进代码。还有一个问题,这只是一个任务,我试过了。

注意:pstart,qstart,pend,qend在板载JSON文件中定义的这些东西。只是我会读取和执行所以读取执行并不是什么大问题如果我从服务器机器收到多个字符串(任务)必须逐个完成任务。例如,将收到如下所示的字符串

working|xy|2|3*working1|xy|8|7*working3|xy|12|15*working4|xy|17|20

上面的字符串有四个不同的任务,我会在同一时间收到,现在我想连续拆分并完成任务。我希望在这里有这么多有经验的人可以帮助解决这个问题。

java c++ json qt websocket
1个回答
0
投票

使用*拆分后,使用循环逐个处理任务。

const QStringList taskList = QString("working|xy|2|3*working1|xy|8|7*working3|xy|12|15*working4|xy|17|20").split('*');

    for (const QString& task : taskList)
    {
        auto params = task.split('|');
        /* Perform 1 task */
       // ...
    }

/* Report back to server */
// ...

上面的代码使用C ++ ranged-for-loop。

您可以使用较旧的for循环执行相同的操作:

for (int i = 0; i < taskList.count(); ++i)
{
    auto params = taskList[i].split('|');
    /* Perform 1 task */
   // ...
}
© www.soinside.com 2019 - 2024. All rights reserved.