具有多任务处理功能的JSON

时间:2017-12-13 07:07:00

标签: java c++ json qt websocket

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

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

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

working|pq|0|1

从网络套接字我会收到字符串

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

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

1 个答案:

答案 0 :(得分: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 */
   // ...
}