Skip to content
  • Categories
  • Recent
  • Tags
  • Popular
  • Users
  • Groups
  • Search
  • Get Qt Extensions
  • Unsolved
Collapse
Brand Logo
  1. Home
  2. Qt Development
  3. Mobile and Embedded
  4. JSON with multi tasking
QtWS25 Last Chance

JSON with multi tasking

Scheduled Pinned Locked Moved Unsolved Mobile and Embedded
qt c++embedded qtjsonwebsocketjava
8 Posts 2 Posters 2.9k Views
  • Oldest to Newest
  • Newest to Oldest
  • Most Votes
Reply
  • Reply as topic
Log in to reply
This topic has been deleted. Only users with topic management privileges can see it.
  • ? Offline
    ? Offline
    A Former User
    wrote on last edited by
    #1

    Hi Guys,

    I am new for QT C++ development. I have an processor which will control the Hardware. From server (Java) I will sent the instructions to that Hardware. According to that particular instruction it is going to perform. This is general idea of my project.

    Basic control instructions written on board. Now What I want and What is the problem I am going to describe that ? Sorry for my poor english.

    I am going to send the JSON string from the server. For example

    working|pq|0|1
    

    From websocket I will receive the string

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

    Now I have received a string from server. I have taken that string into another thread for giving instruction to Hardware.

    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;
                }
            }
    

    So when this point (whatever we fixed) reached the particular task, finally it will get stop. May be above code have some experienced issue. So person can help me to improve the code. One more question, This is only one task, I have tried.

    Note : pstart, qstart, pend, qend these things defined in on board Json file. Just I will read and execute so reading executing is not a big deal
    

    If I receive the multiple string (task) from server machine have to complete the task one by one. For example will receive the string like given below

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

    Above string have a four different task, I will receive in same time, now I want to split and complete the task one by one continuously. I hope here so many experienced person can help and solve this issue.

    JKSHJ 1 Reply Last reply
    0
    • ? A Former User

      Hi Guys,

      I am new for QT C++ development. I have an processor which will control the Hardware. From server (Java) I will sent the instructions to that Hardware. According to that particular instruction it is going to perform. This is general idea of my project.

      Basic control instructions written on board. Now What I want and What is the problem I am going to describe that ? Sorry for my poor english.

      I am going to send the JSON string from the server. For example

      working|pq|0|1
      

      From websocket I will receive the string

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

      Now I have received a string from server. I have taken that string into another thread for giving instruction to Hardware.

      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;
                  }
              }
      

      So when this point (whatever we fixed) reached the particular task, finally it will get stop. May be above code have some experienced issue. So person can help me to improve the code. One more question, This is only one task, I have tried.

      Note : pstart, qstart, pend, qend these things defined in on board Json file. Just I will read and execute so reading executing is not a big deal
      

      If I receive the multiple string (task) from server machine have to complete the task one by one. For example will receive the string like given below

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

      Above string have a four different task, I will receive in same time, now I want to split and complete the task one by one continuously. I hope here so many experienced person can help and solve this issue.

      JKSHJ Offline
      JKSHJ Offline
      JKSH
      Moderators
      wrote on last edited by
      #2

      Hi @Geeva,

      It's not clear: What is your question? Do you want to know how to split the long string into individual tasks?

      working|xy|2|3*working1|xy|8|7*working3|xy|12|15*working4|xy|17|20
      
      1. Split this string using the * character first, to get 4 task strings:

        • working|xy|2|3
        • working1|xy|8|7
        • working3|xy|12|15
        • working4|xy|17|20
      2. Take the first task and split using the | character.

      3. Perform the task

      4. Repeat #2 and #3 with the 2nd task

      5. Repeat #2 and #3 with the 3rd task

      6. Repeat #2 and #3 with the 4nd task

      Please note: Your strings are not JSON!

      Qt Doc Search for browsers: forum.qt.io/topic/35616/web-browser-extension-for-improved-doc-searches

      ? 1 Reply Last reply
      1
      • JKSHJ JKSH

        Hi @Geeva,

        It's not clear: What is your question? Do you want to know how to split the long string into individual tasks?

        working|xy|2|3*working1|xy|8|7*working3|xy|12|15*working4|xy|17|20
        
        1. Split this string using the * character first, to get 4 task strings:

          • working|xy|2|3
          • working1|xy|8|7
          • working3|xy|12|15
          • working4|xy|17|20
        2. Take the first task and split using the | character.

        3. Perform the task

        4. Repeat #2 and #3 with the 2nd task

        5. Repeat #2 and #3 with the 3rd task

        6. Repeat #2 and #3 with the 4nd task

        Please note: Your strings are not JSON!

        ? Offline
        ? Offline
        A Former User
        wrote on last edited by
        #3

        @JKSH Sorry for confusion. I know how to split. After splitting will get 4 different task. Here, the question is How to perform the task one by one.

        Once we received the string we can split it using * and |. Now the task going to start. First working|xy|2|3 this task should complete the it should go to next task automatically, similar should happen each task.

        After completed all task it should stop & sent the message to server. This is what I want !!! I hope you can understand now.

        JKSHJ 1 Reply Last reply
        0
        • ? A Former User

          @JKSH Sorry for confusion. I know how to split. After splitting will get 4 different task. Here, the question is How to perform the task one by one.

          Once we received the string we can split it using * and |. Now the task going to start. First working|xy|2|3 this task should complete the it should go to next task automatically, similar should happen each task.

          After completed all task it should stop & sent the message to server. This is what I want !!! I hope you can understand now.

          JKSHJ Offline
          JKSHJ Offline
          JKSH
          Moderators
          wrote on last edited by
          #4

          @Geeva said in JSON with multi tasking:

          How to perform the task one by one.

          After you split using *, use a loop to process your tasks one by one.

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

          The code above uses a C++ ranged-for-loop.

          You can do the same using an older for-loop:

          for (int i = 0; i < taskList.count(); ++i)
          {
              auto params = taskList[i].split('|');
              /* Perform 1 task */
             // ...
          }
          

          Qt Doc Search for browsers: forum.qt.io/topic/35616/web-browser-extension-for-improved-doc-searches

          ? 1 Reply Last reply
          1
          • JKSHJ JKSH

            @Geeva said in JSON with multi tasking:

            How to perform the task one by one.

            After you split using *, use a loop to process your tasks one by one.

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

            The code above uses a C++ ranged-for-loop.

            You can do the same using an older for-loop:

            for (int i = 0; i < taskList.count(); ++i)
            {
                auto params = taskList[i].split('|');
                /* Perform 1 task */
               // ...
            }
            
            ? Offline
            ? Offline
            A Former User
            wrote on last edited by
            #5

            @JKSH Thanks a lot. It is very useful. Just I want to take values. Consider p and q values are 2|3 8|7 12|15 17|20. If I start the machine, pq(Consider as x and y axis) first it will start and reached to 2,3 after this process it will reach to 8,7 etc.

            So similar condition (given by you), is it applicable for this? or else any different approach I have to do. These condition will come inside while loop or outside while loop ? Important thing task one by one only it should complete.

            JKSHJ 1 Reply Last reply
            0
            • ? A Former User

              @JKSH Thanks a lot. It is very useful. Just I want to take values. Consider p and q values are 2|3 8|7 12|15 17|20. If I start the machine, pq(Consider as x and y axis) first it will start and reached to 2,3 after this process it will reach to 8,7 etc.

              So similar condition (given by you), is it applicable for this? or else any different approach I have to do. These condition will come inside while loop or outside while loop ? Important thing task one by one only it should complete.

              JKSHJ Offline
              JKSHJ Offline
              JKSH
              Moderators
              wrote on last edited by
              #6

              @Geeva said in JSON with multi tasking:

              These condition will come inside while loop or outside while loop ?

              Sorry, I don't understand what you mean by "condition".

              Important thing task one by one only it should complete.

              The loop runs "one by one". It will read 2|3 first. After it finishes reading 2|3, it will read 8|7. After it finishes reading 8|7, it will read 12|15.

              Loops are very basic but very important in most programming languages. If you have uncertainties about how loops work, I recommend you take some C++ lessons. This will give you important skills and knowledge.

              Qt Doc Search for browsers: forum.qt.io/topic/35616/web-browser-extension-for-improved-doc-searches

              ? 1 Reply Last reply
              3
              • JKSHJ JKSH

                @Geeva said in JSON with multi tasking:

                These condition will come inside while loop or outside while loop ?

                Sorry, I don't understand what you mean by "condition".

                Important thing task one by one only it should complete.

                The loop runs "one by one". It will read 2|3 first. After it finishes reading 2|3, it will read 8|7. After it finishes reading 8|7, it will read 12|15.

                Loops are very basic but very important in most programming languages. If you have uncertainties about how loops work, I recommend you take some C++ lessons. This will give you important skills and knowledge.

                ? Offline
                ? Offline
                A Former User
                wrote on last edited by A Former User
                #7

                @JKSH Thanks for solving basic confusion. I have one more doubt also. Here, I have attached program for verification. I hope you can provide a proper solution

                void Thread::run()
                {
                workingvaluepq = " working|xy|1|0 ";
                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;
                
                for (int i = 0; i < taskList.count(); ++i)
                {
                    auto params = taskList[i].split('|');
                    /* Perform 1 task */
                }
                
                    while(true)
                    {
                          All the stuff here
                    }
                

                @JKSH condition (Program instruction)

                JKSHJ 1 Reply Last reply
                0
                • ? A Former User

                  @JKSH Thanks for solving basic confusion. I have one more doubt also. Here, I have attached program for verification. I hope you can provide a proper solution

                  void Thread::run()
                  {
                  workingvaluepq = " working|xy|1|0 ";
                  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;
                  
                  for (int i = 0; i < taskList.count(); ++i)
                  {
                      auto params = taskList[i].split('|');
                      /* Perform 1 task */
                  }
                  
                      while(true)
                      {
                            All the stuff here
                      }
                  

                  @JKSH condition (Program instruction)

                  JKSHJ Offline
                  JKSHJ Offline
                  JKSH
                  Moderators
                  wrote on last edited by
                  #8

                  Hi @Geeva,

                  @Geeva said in JSON with multi tasking:

                  @JKSH Thanks for solving basic confusion. I have one more doubt also. Here, I have attached program for verification. I hope you can provide a proper solution

                  You're welcome. I'm happy to teach you basics. However, verifying your program is too difficult to do on a forum.

                  You need to do 2 things:

                  1. Take C++ lessons
                  2. Practice writing and debugging simple programs for your hardware

                  Qt Doc Search for browsers: forum.qt.io/topic/35616/web-browser-extension-for-improved-doc-searches

                  1 Reply Last reply
                  0

                  • Login

                  • Login or register to search.
                  • First post
                    Last post
                  0
                  • Categories
                  • Recent
                  • Tags
                  • Popular
                  • Users
                  • Groups
                  • Search
                  • Get Qt Extensions
                  • Unsolved