zyzx的小窝

C/C++,GUI,个人移动存储,zyzx_lsl@163.com

 

N(2) 串口编程过程

tag:C++,Observer,串口编程,隐藏窗口

/* Create By zyzx
* Created 2008-05-30
* Modified 2008-06-06
*/

        在串口编程中,我们通常会碰到这样的问题:监听端口的线程得到数据并将数据整理后,通知相应了处理程式。。而这个过程中有两个地方值得注意:1.监听线程一次得到的数据一般是不完整的,如何拼凑成我们需要的格式是一个难点;2.假设通过第一步,已经得到完整的数据(C结构或类)如何将这些信息告知UI主线程,并让主线程做处理,而不会引起UI主线程的阻塞(表现出来的就是很卡)。

        略过第一步(N(3)中再讨论),第二步中最容易想到的方法是使用回调函数,当数据到达时通知(一般采用消息或事件机制防止阻塞)UI主线程去处理回调函数。
        这样做会带来一些问题:实现过程和UI界面耦合很紧;会增加很多全局变量,影响编程逻辑;线程之间对全局变量的存取顺序(即线程通讯问题)

       为将端口读写模块与主应用程序模块分离,在编写端口读写模块的时候,我们不知到是谁在使用,所以无法明确的指定哪个窗口对象获得消息或事件。但为防止阻塞,实现消息或事件驱动,而又不影响主线程,我们可以由UI主线程创建一个隐藏的窗口(初始化时间)。这个窗口由端口读写模块来管理,COM的Read线程得到数据后并整理后通过消息或事件通知这个隐藏窗口(Socket编程中常用方法)。

       如下图:为整个串口处理过程。
串口过程08-06-06.png
注:图中的数据结构是地理信息结构,此处只为说明串口通讯过程以及如何去组织这些结构。(换成定义的指令结构,是一莫一样的)

偶简单定义的地信结构如下图:
Geometry08-06-06.png

posted on 2009-04-27 17:03 zyzx 阅读(580) 评论(0)  编辑 收藏 引用 所属分类: C/C++体会


只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理


导航

统计

常用链接

留言簿(1)

随笔分类

随笔档案

常用链接

搜索

最新评论

阅读排行榜

评论排行榜