指令-响应对应问题
问题描述
在开发一款上位机时,需要轮询来获取数据,但由于数据需要经过一些算法,所以发过来就会耗费很长的时间。因为这个原因,当我开着轮询时,再点击其它按钮功能,就会发现这个按钮功能的响应先传回来,然后就出现按钮功能的指令正常响应,轮询的等待也响应(把按钮功能的响应当做自己的响应)报指令码错误的信息。
问题解决
通过查阅资料,我发现这是最经典的指令响应问题。
解决思路一:在发送其它指令的时候关闭轮询,等其他指令正常返回后再开启轮询。(舍弃)
施行时遇到的问题:轮询指令响应太慢,因为我是另开线程发送轮询指令,响应的等待时间我设的很长,所以当我停止线程发送其它指令的时候,轮询的响应指令还是会接送,然后会把这个响应当做其它指令的响应返回,还是会报错,出现和问题一样的情况。
因此我就想到了标记命令码,当轮询停止时,就舍弃掉这个响应的返回响应。这样其实还会存在问题(轮询响应和其它指令响应哪个先返回呢,按道理说都有可能,就会出现舍弃的可能是需要的指令),所以我觉得这个解决方法不太行。
解决思路二:发送时将功能码加入队列(最佳解决方法)
在发送时将功能码入队列,在等待响应时将功能码出列。如果功能码不匹配,就不做任何处理。顺利解决问题。
浙公网安备 33010602011771号