论坛首页 入门技术论坛

关于串口发送命令读取数据的业务逻辑实现

浏览 3673 次
该帖已经被评为新手帖
作者 正文
   发表时间:2007-05-31  
本人在写串口程序时遇到难题,请各位一下:
想要完成的功能阐述如下:
1.写一个类ClassA,通过ClassA.methodA,发送信息给串口,
2.ClassA实现监听接口,实现监听方法methodB,当有信息从串口返回时,将触发监听事件,调用此方法methodB()
3.接收到上一条命令的返回结果后,接着再发送命令给串口.就这样循环N次,有N个命令需要发送给串口,
4.约束条件:发送一条命令后,需要等待返回结果,才能发送下一条命令

本人大致的想法是发送一条命令调用方法methodA()后,在methodA()里调用wait(),同时设置是否已经接收的判断条件变量为receive=false,
当有返回事件,将触发监听事件,调用方法methodB(),在方法methodB()中接收返回结果,同时将receive=true和调用notify(),
如果用单线程,不能实现接收结果后再将流程转向发送再一次信息,如果使用多线程,则无法直接调用methodB(),因为methodB需要传递event参数.
以上可能写得有点罗嗦,简述一下是这样,发送A命令,等待返回结果,返回A结果,发送B命令,,等待返回结果,返回B结果,....
如何实现,我想了几天,想不通,请各位一下,万分感谢!
   发表时间:2007-05-31  
简单一点:
可以使用一个队列和一个线程,线程侦听是否有收到命令结果,如果有,就触发相应的处理事件,然后从队列取一条消息发出去,然后再等待消息响应,如此循环...
要考虑如果等待不到返回结果时应该如何处理,否则程序有可能一直傻等下去,所以最好有超时控制,在超时时间后如果没有结果返回应该尝试重发或者从队列取下一条消息发送。

复杂一点的,1个队列,多个线程,分别处理收发。
0 请登录后投票
   发表时间:2007-06-01  
谢谢thekll的帮助,发现自己把问题写出来,也是理清自己思路的好方法,我的解决方法和thekll所提到的第一点差不多,就是把发送命令也放在监听方法里,当然启动时要在监听方法先发送第一个命令.
再谢谢thekll提到的超时处理,我还没想到.
0 请登录后投票
论坛首页 入门技术版

跳转论坛:
Global site tag (gtag.js) - Google Analytics