现在的位置: 首页 > 综合 > 正文

SerialPort 同步和异步数据读取

2013年10月13日 ⁄ 综合 ⁄ 共 584字 ⁄ 字号 评论关闭

SerialPort同步和异步数据读取(二)     多线程

 

 

 


这是SerialPort定时操作例程,以两种方式接收数据,异步方式接收数据至少需要500ms,同步方式1S超时.

这里没有考虑信息完整性的处理,接收信息的完整性包括你需预先知道接收字节的长度或结尾处的字节。

对于长度的完整性,你可以用同步方式接收数据,在从线程用serialPort.BytesToRead 判断累计接收字节的长度.

对于预先知道结尾处字节的完整性,你可以用serialPort.ReadTo (string value)方法读取数据(value为结尾处的字符串)

对于长度和结尾处字节不能确定信息的完整性处理,
我的一种方法是用异步的方式,这种方法需事先估计出接收对方信息所需的时间,将此时间设置为从线程睡眠的时间。
另一种方法是用同步方式接收,当SerialPort.ReadByte()方法阻塞到接收到初始始数据后,从线程每次睡眠一个短暂的时间,
用serialPort.BytesToRead ==0判断有无新数据.若有新数据,从线程继续睡眠;若没有新数据到来,说明数据是完整的。

当然数据完整接收后,仍要用接收数据的协议(头、尾字节、校验等方式)判断数据的正确性,保证数据真正是完整的。 


抱歉!评论已关闭.