如何在最后一个命令未完成时接收第二个命令?我有一个从消息队列接收命令并处理解析器命令的应用程序。但如果最后一个命令是“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;
}
}
}
}
1条答案
按热度按时间6qqygrtg1#
如果您想同时做两件事,例如执行一条消息,同时检查是否收到另一条消息,那么最简单的解决方案可能是启动一个线程。
但是,要注意,你不能戳一个线程并告诉它停止。如果你想能够提前停止你的“执行命令”线程,那么你必须像这样构造它(伪代码):
关键是 * 您 * 必须自己显式地查找停止条件,并在需要停止时让线程自行终止。根据它所做的需要花费时间的事情,您也可以使用
std::condition_variable
来向线程发出信号。