一种软件实现同步通信及异步通信的方法

文档序号:7724526阅读:753来源:国知局
专利名称:一种软件实现同步通信及异步通信的方法
技术领域
本发明涉及一种软件功能模块间通信的具体实现方法技术领域,特别涉及一种软件实现同步通信及异步通信的方法。
背景技术
目前,在嵌入式产品开发中,由于用户功能需求的不断增加,独立的软件模块越来 越多,功能也越来越独立,因此模块间的相互通信是必不可少的。例如用户通过遥控器 来操作显示屏上的GUI菜单时,在软件中实现时可分成两个独立的模块一个是遥控器接 收处理模块,一个是⑶I显示及处理模块。两模块间的通信可分为两种,即异步通信和同 步通信。当为同步通信时,用户必须等到GUI菜单中的操作完成后才能进行接下来的遥 控操作,这种情况下要求实时性比较高;而异步通信时,可以边操作遥控,⑶I菜单中的处 理也可在后台执行,这种情况下没有很高的实时性的要求。而在一般的产品开发中,这两 种通信方式都是由第三方的中间件来提供的服务或接口(如minigUi、DirectFB等),不 仅涉及到软件开发的授权费用问题,而且也占用较多的系统资源。接近的现有技术包括 CN200610154794. 2基于Java的进程间异步通信的实现方法,涉及进程间通信技术领域,旨 在提供一种基于Java的进程间异步通信的实现方法。该方法包括以下步骤(1)通信服务 进程的实现;⑵进程内通信服务进程实现;⑶消息的设计;⑷通信过程的实现。本发明 采用了集中式的通信方式,并且在与上层应用的交互中引入了消息触发机制,对收到的消 息由通信系统负责调用回调函数进行处理。同时,将消息封装成对象,利用Java的序列化 机制直接传送对象,简化上层应用对消息的封装与解析;进程只和服务程序通信,进程间以 服务程序作为中介交换信息;进程了解服务程序的位置,服务程序保留所有进程的信息。

发明内容
本发明的目的是提出了一种利用软件方法实现同步通信及异步通信这两种通信 方式的方法,并且不基于任何其它的中间件。一种软件实现同步通信及异步通信的方法,包括以下步骤(1)同步通信的实现 ①注册消息处理函数;②发送同步消息后,等待接收消息模块的处理;③接收消息模块执 行消息处理;④发送消息模块返回处理结果,执行下一步操作;(2)异步通信的实现①初 始化消息队列,分配系统资源,初始化读出和写入的消息数为0 ;②发送消息到消息队列中 保存并排序,使写入的消息数加1 ;③发送消息模块立即返回结果,可执行下一步操作;④ 接收消息模块定时查看消息队列的当前状态;⑤如没有消息可读时,则等待;⑥如有消息 存在,则从中读出一条消息,并使读出的消息数加1 ;⑦接收消息模块执行读出的消息进行 处理操作。本发明的有益效果本发明的一种软件实现同步通信及异步通信的方法,提出一个比较独立的模块算 法,来实现各个软件功能模块间的同步通信及异步通信的方法,利用一个注册的回调函数实现同步通信,采用一个循环的消息队列来实现异步通信的方法,不仅占用较少的系统资 源,不基于任何其它的中间件,而且可用于各种不同的开发平台,可移植性强。


本发明将通过例子并参照附图的方式说明,其中图1是本发明同步通信的流程示意图;图2是本发明异步通信的流程示意图。
具体实施例方式本说明书中公开的所有特征,或公开的所有方法或过程中的步骤,除了互相排斥 的特征和/或步骤以外,均可以以任何方式组合。本说明书(包括任何附加权利要求、摘要和附图)中公开的任一特征,除非特别叙述,均可被其他等效或具有类似目的的替代特征加以替换。即,除非特别叙述,每个特征只 是一系列等效或类似特征中的一个例子而已。如图1所示的同步通信的实现①注册消息处理函数;②发送同步消息后,等待接收消息模块的处理;③接收消息模块执行消息处理;④发送消息模块返回处理结果,执行 下一步操作;定义模块的数据结构如下struct—module{HANDLE handle ;/*此模块在内存中的起始地址,即标号*/....../*模块的其它信息及属性*/WNDPROC *WindowProc ;/* 消息处理函数 */} MODULE;同步通信SendMessage函数的实现方法SendMessage (HANDLE handle/* 资源标号 */,int nType/* 消息类型 */,DWORD nDatal/* 传送的数据 1*/,DWORD nData2/* 传送的数据 2*/);注册自定义的消息处理函数callbackFun ;执行CallbackFun = GetModuleProc (handle)函数由 handle 来找到相应接收模 块的消息处理函数callbackFun ;直接执行此注册的回调函数CallbackFun ;返回。如图2所示的异步通信的实现①初始化消息队列,分配系统资源,初始化读出和 写入的消息数为0 ;②发送消息到消息队列中保存并排序,使写入的消息数加1 ;③发送消 息模块立即返回结果,可执行下一步操作;④接收消息模块定时查看消息队列的当前状态; ⑤如没有消息可读时,则等待;⑥如有消息存在,则从中读出一条消息,并使读出的消息数加1 ;⑦接收消息模块执行读出的消息进行处理操作。模块的数据结构如下struct—module{HANDLE handle ;/*此模块在内存中的起始地址,即标号*/............/*模块的其它信息及属性*/WNDPROC*WindowProc ;/* 消息处理函数 */PMSGQUEUE pMessages ;/*本模块的消息队列管理*/} MODULE;消息队列数据结构定义Struct—MSGQUEUE{Pthread_mutex_t lock ;/氺同步丰几$!| 氺/MSG msgData ;/*消息内容和数据*/Int readPos ;/*当前在消息队列中可读出的位置*/Int writePos ;/*当前在消息队列中可写入的位置*/};异步通信PostMessage函数的实现方法初始化消息队列,分配内存空间,把可读出和可写入的消息数初始化为0 ;注册自定义的消息处理函数;由参数handle获取此module的消息队列地址;把相应的消息数据放到此消息队列中进行排序;把消息队列中的写入位置加1.本发明并不局限于前述的具体实施方式
。本发明扩展到任何在本说明书中披露的新特征或任何新的组合,以及披露的任一新的方法或过程的步骤或任何新的组合。
权利要求
一种软件实现同步通信及异步通信的方法,其特征在于,包括以下步骤(1)同步通信的实现①注册消息处理函数;②发送同步消息后,等待接收消息模块的处理;③接收消息模块执行消息处理;④发送消息模块返回处理结果,执行下一步操作;(2)异步通信的实现①初始化消息队列,分配系统资源,初始化读出和写入的消息数为0;②发送消息到消息队列中保存并排序,使写入的消息数加1;③发送消息模块立即返回结果,可执行下一步操作;④接收消息模块定时查看消息队列的当前状态;⑤如没有消息可读时,则等待;⑥如有消息存在,则从中读出一条消息,并使读出的消息数加1;⑦接收消息模块执行读出的消息进行处理操作。
全文摘要
本发明公开了一种软件实现同步通信及异步通信的方法,涉及一种软件功能模块间通信的具体实现方法技术领域,提出一个比较独立的模块算法,来实现各个软件功能模块间的同步通信及异步通信的方法,利用一个注册的回调函数实现同步通信,采用一个循环的消息队列来实现异步通信的方法,不仅占用较少的系统资源,不基于任何其它的中间件,而且可用于各种不同的开发平台,可移植性强。
文档编号H04L12/56GK101800695SQ20091031258
公开日2010年8月11日 申请日期2009年12月30日 优先权日2009年12月30日
发明者尤金刚 申请人:四川长虹电器股份有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1