c++ 如何在最后一个命令未完成时接收第二个命令?

3phpmpom  于 2022-11-27  发布在  其他
关注(0)|答案(1)|浏览(119)

如何在最后一个命令未完成时接收第二个命令?我有一个从消息队列接收命令并处理解析器命令的应用程序。但如果最后一个命令是“start”,它需要一些时间才能完成,如while循环中的1分钟。在同一时间,另一个命令“stop”传入,如何实现?通过线程?

main()
{

    while(true)
    {
        rc = mq_receive(rmqID, rbuff)
        if (rc < 0)
        {
            cout <<"receive timeout !!"<< endl;
        }
        else
        {
            cout <<"receive message : "<< rbuff << endl;
            std::string cmd = rbuff;
            
            if (cmd == "start")
            {           
                cout <<"[receive message] flash_cmd = true"<< endl;
                flash_cmd = true;
            }
            else if (cmd == "stop")
            {           
                cout <<"[receive message] stop command = true"<< endl;
                stop_cmd = true;
            }
            else
            {
                cout <<"[receive message] Command error!"<< endl;
            }
        }

        if (stop_cmd == true)
        {
            cout <<"stop process ......."<< endl;
            stop_flag = true;
        }

        if (flash_cmd == true)
        {
            cout <<"[programming] Start install Processing"<< endl;
            while
            {
              // do flash....
              if(stop_flag == true)
              {
                  break;
              }
            }
        }
}
6qqygrtg

6qqygrtg1#

如果您想同时做两件事,例如执行一条消息,同时检查是否收到另一条消息,那么最简单的解决方案可能是启动一个线程。
但是,要注意,你不能戳一个线程并告诉它停止。如果你想能够提前停止你的“执行命令”线程,那么你必须像这样构造它(伪代码):

void threadFunc(std::atomic_bool stop) {
  do_first_part();
  if(stop)
    return;

  do_second_part();
  if(stop)
    return;
...

关键是 * 您 * 必须自己显式地查找停止条件,并在需要停止时让线程自行终止。根据它所做的需要花费时间的事情,您也可以使用std::condition_variable来向线程发出信号。

相关问题