wince串口通信
这几天在做一个数据采集的程序,但是遇到一点小困难,在此,请教各位大侠们:
数据是以帧为单位的,有帧头和帧尾,但帧的长度不定,帧的发送间隔也不定,现在,我为串口接收开了一个线程,可以将这些数据一个字符一个字符存入缓冲区(循环队列),再为数据处理开了一个线程,完成数据的处理,但是,问题来了,因为数据接收和数据处理速度是不匹配的,肯定要用到线程的同步,有什么好的办法可以将这些帧提取出来,然后再以帧为单位去处理这些数据?
[解决办法]
线程1:接收数据----->解析并放入数据列表(std::list或其他)
线程2:处理列表数据
对列表数据同步,可用Critical Section
[解决办法]
接收线程,接收数据,如果累计接收到完整的帧数据,就入队列,通知另外一个线程去处理帧数据。处理帧数据的线程在运作的时候,判断队列为非空则继续处理数据,如果为空就等待接收线程的通知再继续处理
[解决办法]
信号同步吧。设置两个信号事件,通过帧头和帧尾来判别和提取一个完整的帧,接着激活一个处理事件,通知解析线程处理数据,数据处理完后激活读的事件来通知接收线程继续接收数据。