【问题标题】:JSON with multi tasking具有多任务处理的 JSON
【发布时间】:2017-12-13 07:07:00
【问题描述】:

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

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

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

working|pq|0|1

我会从 web socket 收到字符串

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

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

【问题讨论】:

  • 是Qt,不是QT,QT是Quick Time。
  • 感谢您提供的信息。我已经按照你的建议修改了。

标签: java c++ json qt websocket


【解决方案1】:

使用 * 拆分后,使用循环逐一处理您的任务。

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 */
   // ...
}

【讨论】:

  • 我怎样才能完成特定任务?如果一共有5个功能,那么如何一个一个地完成每一个任务呢?
  • 你可以把它保存到数组中,然后一个一个地完成任务QStringList ab = taskList[0].split("|");
  • 是的,我已经创建了数组,然后存储了第一个值。然后检查int aInt = a.toInt(&amp;ok); 工作正常。
猜你喜欢
  • 2020-05-10
  • 1970-01-01
  • 2016-08-19
  • 1970-01-01
  • 2021-11-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多