超声测量系统的模块交互方法和超声测量系统的制作方法

文档序号:6437385阅读:274来源:国知局
专利名称:超声测量系统的模块交互方法和超声测量系统的制作方法
技术领域
本发明涉及计算机技术领域,具体涉及超声测量系统的模块交互方法和超声测量系统。
背景技术
面向对象程序开发方式是目前主流的程序开发方式之一,其优点是容易实现模块化,缺点是模块之间的交互比较困难。目前,超声测量系统多采用面向对象程序开发方式设计,由于超声测量系统涉及的模块通常较多,各个模块之间的交互变得复杂,例如,经常要进行双向通信、一对多的通信等。现有通过调用函数接口的方法进行交互极易导致逻辑混乱,以至整个系统难以扩展和维护。

发明内容
本发明实施例提供超声测量系统的模块交互方法和超声测量系统,以简化超声测量系统的模块间交互复杂度。为解决上述技术问题,本发明实施例提供以下技术方案一种超声测量系统的模块交互方法,所述超声测量系统中包括第一模块和至少一个第二模块,所述方法包括第一模块创建第一消息类型;所述第一模块生成所述第一消息类型对应的第一消息管理组件,并为所述第一消息管理组件分配第一组件标签;所述第一模块生成符合所述第一消息类型的第一消息;所述第一模块基于所述第一组件标签,调用所述第一消息管理组件发送所述第一消息;若第二模块在所述第一消息管理组件进行了注册,则所述第二模块通过所述第一消息管理组件接收所述第一消息。一种超声测量系统,所述超声测量系统中包括第一模块和至少一个第二模块,所述第一模块,用于创建第一消息类型;生成所述第一消息类型对应的第一消息管理组件,并为所述第一消息管理组件分配第一组件标签;生成符合所述第一消息类型的第一消息;基于所述第一组件标签,调用所述第一消息管理组件发送所述第一消息;所述第二模块,用于在所述第一消息管理组件进行了注册后,通过所述第一消息管理组件接收所述第一消息。由上可见,本发明实施例通过引入消息管理组件实现了消息发送模块和消息接收模块之间的解耦。虽然对某消息感兴趣的模块可能有多个,但消息发送模块无需获知有哪些模块需要接收该消息。而每个对指定类型消息感兴趣的模块都可通过该消息类型对应的消息管理组件接收符合该指定类型的消息,这样就有利于简化超声测量系统的模块间交互复杂度。


为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动性的前提下,还可以根据这些附图获得其他的附图。图Ι-a是一种模块间一对一单向通信方式示意图;图Ι-b是一种模块间一对多单向通信方式示意图;图1-c是一种模块间一对多双向通信方式示意图;图2是本发明实施例提供的一种超声测量系统的模块交互方法的流程示意图;图3_a是本发明实施例提供的一种引入消息管理组件后的一对多单向通信方式示意图;图3_b是本发明实施例提供的一种引入消息管理组件后的多对多单向通信方式示意图;图3-c本发明实施例提供的一种超声测量系统的模块交互示意图;图4本发明实施例提供的一种超声测量系统的示意图。
具体实施例方式本发明实施例提供超声测量系统的模块交互方法和超声测量系统。下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。首先介绍超声测量系统中常见的功能模块,一般包括图形绘制模块、图元生成模块、图元组合模块、计算模块、单位转换模块、结果显示模块、数据管理模块、菜单生成模块、 菜单操控模块等等。现有技术方案难以解决超声测量系统中模块众多,模块间交互复杂的问题。现有技术的模块间交互一般通过直接调用接口函数实现,这是一种典型的一对一单向通信方式。直接调用接口函数的主要缺点是1)参与交互的双方直接关联在一起,消息发送端知道消息接收端。2)如果消息接收端在接收到消息发送端发送的消息后,还需要向其反馈新消息,就会导致循环依赖。模块间可能存在如下几种交互方式例如图Ι-a所示,模块间一对一单向通信方式,消息发送模块向某一个消息接收模块发送指令或数据。例如图Ι-b所示,模块间一对多单向通信方式,消息发送模块向多个消息接收模块发送指令或数据。例如图1-c所示,模块间双向通信方式,模块间互发指令或数据。下面通过具体实施例,来介绍本发明方案如何简化超声测量系统模块之间的交互复杂度。
本发明超声测量系统的模块交互方法的一个实施例,其中,该超声测量系统中包括第一模块和至少一个第二模块,方法可包括第一模块创建第一消息类型;第一模块生成第一消息类型对应的第一消息管理组件,并为第一消息管理组件分配第一组件标签;第一模块生成符合第一消息类型的第一消息;第一模块基于第一组件标签,调用第一消息管理组件发送第一消息;若第二模块在第一消息管理组件进行了注册,则第二模块通过第一消息管理组件接收第一消息。参见图2、具体步骤可包括201、第一模块创建第一消息类型;其中,若第一模块后续需发送某种类型的消息,则其可先创建对应的消息类型 (为便于引述,称之为第一消息类型)。202、第一模块生成第一消息类型对应的第一消息管理组件,并为第一消息管理组件分配第一组件标签;其中,第一消息管理组件可用于管理第一模块发送的符合第一消息类型的消息。 第一组件标签是用于区分该消息管理组件的编译器唯一标示符,利用第一组件标签可查找到该第一消息管理组件。在一种实施方式中,第一消息管理组件可为一个单例消息管理组件(即第一单例消息管理组件),进一步的,第一消息管理组件可为一个泛型单例消息管理组件(第一泛型单例消息管理组件)。其中,若第一模块生成的第一消息管理组件是一个泛型的单例对象, 由于单例能够增强易用性,泛型能够增强用户可定制性,因此,泛型单例消息管理组件能够增强其应用的灵活性,更好的适应不同应用场景的需要。第一模块可在创建第一消息类型后,自动的生成第一消息类型对应的第一消息管理组件,并为第一消息管理组件分配第一组件标签,以实现消息管理组件建立的自动化。在一种实施方式中,生成某种消息类型对应的消息管理组件的接口声明例如可如下
template〈typename tagName, typename signalType>
class Signal: public Singleton<Signal<tagName, signalType> >
//继承自单例模板
public:
typedef boost::signals2: :signal<signalType> SigType; //消息类型模板typedef boost: signals2 connection ConType; //连接类型模板 typedef typename SigType::slot—type SlotType; //槽类型 public:
ConType Connect ( const SlotType& slot); //连接消息 SigType& Raise ( ); //触发消息
void Disconnect ( const SlotType& slot); //断开指定连接 void DisconnectAll ( ); //断开所有消息其中,tagName为消息管理组件的标签,signalType为消息类型。提供的接口有连接消息、触发消息、断开指定的连接、断开所有链接。消息管理组件继承了单例模板类,该类被实现为可自动生成模板。203、第一模块生成符合第一消息类型的第一消息;例如当第一模块有事件发生需要通知其他模块时,可生成符合第一消息类型的第一消息,以便通过第一消息来通知相关信息。204、第一模块基于第一组件标签,调用第一消息管理组件发送第一消息;205、若第二模块在第一消息管理组件进行了注册,则第二模块通过第一消息管理组件接收第一消息。在一种实施方式中,在第一消息管理组件生成之后,第二模块可根据第一消息类型查找到第一消息管理组件(第一消息管理组件的标签例如是全局唯一的);并可将接收符合第一消息类型的消息的函数接口注册到第一消息管理组件。例如若第二模块在第一消息管理组件进行了注册后,则第一消息管理组件接收到来自第一模块的符合第一消息类型的第一消息,第一消息管理组件将该第一消息转发给注册了对应函数接口的第二模块,第二模块便可通过第一消息管理组件接收该第一消息。可以看出,通过引入消息管理组件实现了消息发送模块和消息接收模块之间的解耦。虽然对第一消息感兴趣的模块可能有多个,但第一模块无需获知有哪些模块需要接收第一消息。而每个对指定类型消息感兴趣的模块都可以通过该消息类型对应的消息管理组件接收符合该指定类型的消息。类似的,第二模块也可创建第二消息类型;生成第二消息类型对应的第二消息管理组件,为第二消息管理组件分配第二组件标签;生成符合第二消息类型的第二消息;第二模块基于第二组件标签,调用第二消息管理组件发送第二消息;若第一模块(和/或其它模块)在第二消息管理组件进行了注册,则第一模块(和/或其它模块)通过第二消息管理组件接收所述第二消息。可以理解,消息数据管理功能对用户是透明的。消息数据的管理可使用关联容器。 以名字为关键字在关联容器中保存消息接收端的信息,执行断开动作时按照关键字在关联容器中找到连接信息,然后执行断开操作。其中,在消息管理组件生成时需要用到单例模板,其接口声明例如可为template <typename T> class Singleton
public:
typedef T* pSelfType; //指向消息管理组件的指针 static ρ SelfType GetInstance (); protected:
Singleton ( ) {} Singleton(const Singleton&); Singleton& operator=(const Singleton&); virtual -Singleton ( ) {}
};可以理解,借助上述模板生成的消息管理组件具有全局可访问的功能,无论是消息接收端还是消息发送端,只通过单例模板提供的接口就可以调用消息管理组件。参见图3-a,图3-a描述了引入消息管理组件后的一对多单向通信情景。参见图3_b,图3_b描述了引入消息管理组件后的三个模块间一对多双向通信情景。其中,模块A发送消息由消息管理组件1负责管理,接受该消息的模块只需要和消息管理组件1交互。模块B和模块C发送的消息分别由消息管理组件2和消息管理组件3负责。 反之,模块A作为接收消息模块时不需要和模块B以及模块C直接交互。参见图3-c,图3-c为一种超声测量系统的模块间交互示意图,其中,矩形表示模块,椭圆形表示消息管理组件,图中只列出了间接交互关系,即通过消息管理组件进行通信的关系。而较为简单的一对一单向通信在不破坏模块性的前提下可使用接口实现。图3-c中一对多交互包括菜单刷新、设置分辨率、模式设置,这类交互方式表现为命令的发送和执行。基于消息管理组件的交互方式能解决一个命令触发一族动作的问题,菜单和按键操作多数属于这种情况。设置菜单项选中标示是双向通信方式,每个菜单项都可给其它菜单项发送消息,基于消息管理组件的交互方式能解决循环依赖问题,每个菜单项都不需要知道其他菜单项,只需要把消息传递给给对应的消息管理组件。测量触发、测量菜单自动折叠、更新图形、更新测量结果是一对一的交互方式,在超声测量系统中,没有使用直接调用接口函数而是通过消息管理组件间接调用。一对一单向通信使用消息管理组件而不是直接调用接口是为解决以下问题1)消息发送端和消息接收端处于分层架构中不同的层次,发送端在底层而接受者在上层。模块调用的一般规则是上层模块调用底层模块,反之就比较困难。比如测量消息的发送是从菜单项模块到图元管理模块,但是菜单项模块处于菜单模块继承体系的底层难以调用其它模块的接口。2)模块分离的需要。图元管理、图形绘制窗体、基本测量、组合测量都是属于测量图形模块,该模块的逻辑关系比较稳定。结果显示窗体属于测量结果模块,这部分属于界面层经常变化。通过消息管理组件实现各模块间接通信,把变化较稳频繁的界面层和比较稳定的领域对象层分离。图3-c中使用了大量的消息管理组件,每个消息管理组件都对应有一个唯一的组件标签。按组件标签定义的消息管理组件例如可为//更新图形typedef pattern:Signal < struct UpdataSeIectedGraphColor,void () > SigUpdateGraphRect ;H更新结果typedef pattern:Signal < struct UpdateRectSignalTag,void() > SigUpdateResultRect ;//更新图像深度typedef pattern::Signal < struct UpdateImageDepth,void (double) > SigUpdateImageDepth ;H设置测量光标typedef pattern::Signal < struct SetMeaCursor,void (const std::string&) > SigSetMeaCursor ;//显示结果窗体typedef pattern::Signal < struct Resu1tWindowShow,void(bool) > SigResultWindowShow ;H激活某一测量项typedef pattern::Signal < struct MenuMessage,void (const mea::MenuMessage&) > SigMenuMessage ;//更新菜单窗体typedef pattern::Signal < struct MenuShowAl1,void() > SigMenuShowAll ;//测量菜单折叠typedef pattern::Signal < struct MenuAutoCloseFolder,void() > SigMenuAutoCloseFolder ;//组合测量子项选中typedef pattern::Signal < struct MenuIndexSelected,void(int) > SigMenuIndexSelected ;Il成像模式设置typedef pattern::Signal < struct MenuModeSetting,void(const char*) > SigMenuModeSetting ;//菜单项选中typedef pattern::Signal < struct MenuButtonColorInit,void() > SigMenuButtonColorInit ;.......................................在实际应用中,消息管理组件的类型都可在头文件TypeTag. h中定义,对消息感兴趣的模块只要包含该文件,然后连接相应的消息类型即可。文件中消息管理组件标签的定义和消息管理组件类型的定义都是在编译期进行,不会占用运行期内存和CPU资源。由上可见,本实施例通过引入消息管理组件实现了消息发送模块和消息接收模块之间的解耦。虽然对某消息感兴趣的模块可能有多个,但消息发送模块无需获知有哪些模块需要接收该消息。而每个对指定类型消息感兴趣的模块都可以通过该消息类型对应的消息管理组件接收符合该指定类型的消息,这样就有利于简化超声测量系统的模块间交互复杂度。并且,超声测量系统众多模块间的交互时所使用的消息管理组件都可以自适应生成,不需要用户写额外代码。此外,引入消息管理组件有利于适应需求变化,例如菜单和按键模块、测量图形模块、测量结果模块都是用户经常使用,需要经常变动的。不同国家和地区甚至不同的医院都可能形成一套自己的操作习惯,通过松耦合的消息管理组件实现交互,可以方便的修改操作流程而无需改变底层的逻辑模块。例如用户要求组合测量结束时菜单项不要自动关闭, 则只要菜单窗体和文件夹自动关闭消息管理组件断开即可。参见图4、本发明实施例还提供一种超声测量系统,超声测量系统中包括第一模块 410和至少一个第二模块420,第一模块410,用于创建第一消息类型;生成第一消息类型对应的第一消息管理组件,并为第一消息管理组件分配第一组件标签;生成符合第一消息类型的第一消息;基于第一组件标签,调用第一消息管理组件发送第一消息;第二模块420,用于在第一消息管理组件进行了注册后,通过第一消息管理组件接收第一消息。在一种应用场景下,第一模块410可具体用于,创建第一消息类型;生成第一消息类型对应的第一单例消息管理组件,并为第一消息管理组件分配第一组件标签;生成符合第一消息类型的第一消息;基于第一组件标签,调用第一消息管理组件发送第一消息。在一种应用场景下,第一模块410可具体用于,创建第一消息类型;生成第一消息类型对应的第一泛型单例消息管理组件,并为第一消息管理组件分配第一组件标签;生成符合第一消息类型的第一消息;基于第一组件标签,调用第一消息管理组件发送第一消息。生成第一消息类型对应的第一泛型单例消息管理组件。在一种应用场景下,第二模块420可具体用于,根据第一消息类型查找到第一消息管理组件,将接收符合第一消息类型的消息的函数接口注册到第一消息管理组件,通过第一消息管理组件接收第一消息。在一种应用场景下,第二模块420可还可用于,创建第二消息类型;生成第二消息类型对应的第二消息管理组件,并为第二消息管理组件分配第二组件标签;生成符合第二消息类型的第二消息;基于第二组件标签,调用第二消息管理组件发送第二消息;第一模块410还用于,在第二消息管理组件注册后,通过第二消息管理组件接收第二消息。可以理解,本实施例的超声测量系统的各个功能模块的功能可以根据上述方法实施例中的方法具体实现,其具体实现过程可参照上述实施例中的相关描述,此处不再赘述。需要说明的是,对于前述的各方法实施例,为了简单描述,故将其都表述为一系列的动作组合,但是本领域技术人员应该知悉,本发明并不受所描述的动作顺序的限制,因为依据本发明,某些步骤可以采用其他顺序或者同时进行。其次,本领域技术人员也应该知悉,说明书中所描述的实施例均属于优选实施例,所涉及的动作和模块并不一定是本发明所必须的。在上述实施例中,对各个实施例的描述都各有侧重,某个实施例中没有详述的部分,可以参见其他实施例的相关描述。综上,本发明实施例通过引入消息管理组件实现了消息发送模块和消息接收模块之间的解耦。虽然对某消息感兴趣的模块可能有多个,但消息发送模块无需获知有哪些模块需要接收该消息。而每个对指定类型消息感兴趣的模块都可以通过该消息类型对应的消息管理组件接收符合该指定类型的消息,这样就有利于简化超声测量系统的模块间交互复杂度。并且,超声测量系统众多模块间的交互时所使用的消息管理组件都可以自适应生成,不需要用户写额外代码。此外,引入消息管理组件有利于适应需求变化,例如菜单和按键模块、测量图形模块、测量结果模块都是用户经常使用,需要经常变动的。不同国家和地区甚至不同的医院都可能形成一套自己的操作习惯,通过松耦合的消息管理组件实现交互,可以方便的修改操作流程而无需改变底层的逻辑模块。例如用户要求组合测量结束时菜单项不要自动关闭, 则只要菜单窗体和文件夹自动关闭消息管理组件断开即可。本领域普通技术人员可以理解上述实施例的各种方法中的全部或部分步骤是可以通过程序来指令相关的硬件来完成,该程序可以存储于一计算机可读存储介质中,存储介质例如可以包括只读存储器、随机存储器、磁盘或光盘等等。以上对本发明实施例所提供的超声测量系统的模块交互方法和超声测量系统进行了详细介绍,本文中应用了具体个例对本发明的原理及实施方式进行了阐述,以上实施例的说明只是用于帮助理解本发明的方法及其核心思想;同时,对于本领域的一般技术人员,依据本发明的思想,在具体实施方式
及应用范围上均会有改变之处,综上,本说明书内容不应理解为对本发明的限制。
权利要求
1.一种超声测量系统的模块交互方法,其特征在于,所述超声测量系统中包括第一模块和至少一个第二模块,所述方法包括第一模块创建第一消息类型;所述第一模块生成所述第一消息类型对应的第一消息管理组件,并为所述第一消息管理组件分配第一组件标签;所述第一模块生成符合所述第一消息类型的第一消息;所述第一模块基于所述第一组件标签,调用所述第一消息管理组件发送所述第一消息;若第二模块在所述第一消息管理组件进行了注册,则所述第二模块通过所述第一消息管理组件接收所述第一消息。
2.根据权利要求1所述的方法,其特征在于,所述生成所述第一消息类型对应的第一消息管理组件,包括生成所述第一消息类型对应的第一单例消息管理组件。
3.根据权利要求3所述的方法,其特征在于,所述生成所述第一消息类型对应的第一单例消息管理组件,包括生成所述第一消息类型对应的第一泛型单例消息管理组件。
4.根据权利要求1所述的方法,其特征在于,第二模块在所述第一消息管理组件进行注册,包括第二模块根据第一消息类型查找到第一消息管理组件;第二模块将接收符合所述第一消息类型的消息的函数接口注册到第一消息管理组件。
5.根据权利要求1至4任一项所述的方法,其特征在于,还包括 所述第二模块创建第二消息类型;所述第二模块生成所述第二消息类型对应的第二消息管理组件,并为所述第二消息管理组件分配第二组件标签;所述第二模块生成符合所述第二消息类型的第二消息;所述第二模块基于所述第二组件标签,调用所述第二消息管理组件发送所述第二消息;若所述第一模块在所述第二消息管理组件进行了注册,则所述第一模块通过所述第二消息管理组件接收所述第二消息。
6.一种超声测量系统,其特征在于,所述超声测量系统中包括第一模块和至少一个第二模块,所述第一模块,用于创建第一消息类型;生成所述第一消息类型对应的第一消息管理组件,并为所述第一消息管理组件分配第一组件标签;生成符合所述第一消息类型的第一消息;基于所述第一组件标签,调用所述第一消息管理组件发送所述第一消息;所述第二模块,用于在所述第一消息管理组件进行了注册后,通过所述第一消息管理组件接收所述第一消息。
7.根据权利要求6所述的超声测量系统,其特征在于,所述第一模块,具体用于创建第一消息类型;生成所述第一消息类型对应的第一单例消息管理组件,并为所述第一消息管理组件分配第一组件标签;生成符合所述第一消息类型的第一消息;基于所述第一组件标签,调用所述第一消息管理组件发送所述第一消息。
8.根据权利要求7所述的超声测量系统,其特征在于,所述第一模块,具体用于创建第一消息类型;生成所述第一消息类型对应的第一泛型单例消息管理组件,并为所述第一消息管理组件分配第一组件标签;生成符合所述第一消息类型的第一消息;基于所述第一组件标签,调用所述第一消息管理组件发送所述第一消息。
9.根据权利要求6所述的超声测量系统,其特征在于,所述第二模块具体用于,根据第一消息类型查找到第一消息管理组件,将接收符合所述第一消息类型的消息的函数接口注册到第一消息管理组件,通过所述第一消息管理组件接收所述第一消息。
10.根据权利要求6至9任一项所述的超声测量系统,其特征在于,所述第二模块还用于,创建第二消息类型;生成所述第二消息类型对应的第二消息管理组件,并为所述第二消息管理组件分配第二组件标签;生成符合所述第二消息类型的第二消息;基于所述第二组件标签,调用所述第二消息管理组件发送所述第二消息;所述第一模块还用于,在所述第二消息管理组件注册后,通过所述第二消息管理组件接收所述第二消息。
全文摘要
本发明实施例公开了超声测量系统的模块交互方法和超声测量系统。其中,一种超声测量系统的模块交互方法,超声测量系统中包括第一模块和至少一个第二模块,方法包括第一模块创建第一消息类型;第一模块生成第一消息类型对应的第一消息管理组件,并为第一消息管理组件分配第一组件标签;第一模块生成符合第一消息类型的第一消息;第一模块基于第一组件标签,调用第一消息管理组件发送第一消息;第二模块在第一消息管理组件进行了注册,则第二模块通过第一消息管理组件接收第一消息。本发明实施例方案有利于简化超声测量系统的模块间交互复杂度。
文档编号G06F9/46GK102495755SQ20111034329
公开日2012年6月13日 申请日期2011年11月3日 优先权日2011年11月3日
发明者周冬辉, 周国义 申请人:深圳市开立科技有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1