[发明专利]一种状态机的实现方法及装置有效
申请号: | 201010193439.2 | 申请日: | 2010-06-04 |
公开(公告)号: | CN101957751A | 公开(公告)日: | 2011-01-26 |
发明(设计)人: | 熊俊 | 申请(专利权)人: | 福建星网锐捷网络有限公司 |
主分类号: | G06F9/44 | 分类号: | G06F9/44 |
代理公司: | 北京同达信恒知识产权代理有限公司 11291 | 代理人: | 郭润湘 |
地址: | 350002 福建省福州市仓*** | 国省代码: | 福建;35 |
权利要求书: | 查看更多 | 说明书: | 查看更多 |
摘要: | |||
搜索关键词: | 一种 状态机 实现 方法 装置 | ||
技术领域
本发明涉及状态机技术领域,尤其涉及一种状态机的实现方法及装置。
背景技术
有限状态机(Finite State Machine,FSM)又称为有限状态自动机或简称状态机,表示有限个状态以及这些状态之间的转移和动作等行为的数学模型。一般情况下,有限状态机通过状态、事件、转换和动作之间的关系来控制状态的转换,其中:
状态(State)指对象在其生命周期中的一种状况,处于某个特定状态中的对象必然会满足某些条件、执行某些动作或者等待某些事件;
事件(Event)指在时间和空间上占有一定位置,并且对状态机来讲是有意义的那些事情,即事件通常会引起状态的变迁,促使状态机从一种状态切换到另一种状态;
转换(Transition)指两个状态之间的一种关系,表明对象将在第一个状态中执行一定的动作,并将在某个事件发生(即某个特定条件满足)时进入第二个状态;
动作(Action)指状态机中可以执行的原子操作,所谓原子操作指它们在运行的过程中不能被其他消息所中断,必须一直执行下去。
状态机作为一种概念性机器,它能采取某种动作来响应一个外部事件。具体采取的动作不仅能取决于接收到的事件,还能取决于各个事件的相对发生顺序。之所以能做到这一点,是因为状态机能够跟踪一个内部状态,它会在收到事件后进行更新。另外,采取的行动还会决定并更新机器的状态。这样一来,任何逻辑都可建模成一系列事件/状态组合。在软件领域,状态机被普遍用于搜索引擎的分词、编译器实现、游戏开发和工作流引擎实现等,例如,在游戏开发中,通常用FSM实现游戏中人物的控制和任务的触发等,在工作流引擎实现中,通常用FSM来实现对于流程实例、活动实例、转移实例、工作项实例的状态迁移。
与其他常用的设计模式有所不同,程序员想要在软件系统中加入状态机时,必须额外编写一部分用于逻辑控制的代码,对于状态机的实现,目前常用的方法有以下两种:
一种方法是使用switch语句实现状态机,其基本思路是为状态机中的每一种状态设置一个case分支,用于对该状态进行处理。每个case分支都对相应状态下的状态转换条件(即触发状态转换的事件)以及动作进行了描述,能够控制状态机较好地工作,但该switch语句实现状态机的方法中,代码的可读性并不理想,主要原因是实现状态机转换时,检查状态转换条件和进行状态转换都混杂在一个case分支中,即混杂在当前状态中完成。显然,如果在每种状态下都需要分别检查多个不同的转换条件,并且需要根据检查结果控制状态机切换到不同的状态,对状态机各状态的控制效率很低,并且,由于如果状态机的状态很多,或者状态之间的转换关系复杂,则代码就会显得复杂混乱,这样,如果需要对状态机进行维护,则存在很大困难,甚至不可维护。
另一种方法是使用函数指针数组实现状态机,状态机实质上就是维护一个“状态-事件”的二维矩阵关系,因此可以采用二维函数指针数组的方法,形如(*process)()process_function[state][event],即通过设定的“状态-事件”的二维矩阵关系,控制状态机的跳转以及相应动作的实现。该方法能够更加直观地实现状态机,但使用该方法实现状态机时,由于动作是为特定的状态和事件设计的,那么一个动作可能混杂不同的逻辑处理,因此状态机转换的效率很低,并且,event(事件)的编号必须从0开始连续编号,因此,如果在某个状态下增加一个事件,其它状态即使不需要考虑这个事件,也需要增加相应的处理以保证矩阵的完整性,因此,对状态机的维护过程很复杂,尤其在系统非常复杂时,状态机甚至不可维护。
综上所述,采用现有技术实现的状态机,对状态机各状态的控制效率低,并且维护过程复杂。
发明内容
有鉴于此,本发明实施例提供一种状态机的实现方法及装置,采用该技术方案实现状态机,提高了对状态机各状态的控制效率,并且易于维护。
本发明实施例通过如下技术方案实现:
根据本发明实施例的一个方面,提供了一种状态机的实现方法。
根据本发明实施例提供的状态机的实现方法,包括:
确定当前生成的事件以及状态机当前的状态;
查找预先确定的存在响应关系的状态与事件的对应关系,判断所述当前生成的事件以及所述状态机当前的状态是否存在响应关系;
若存在响应关系,则根据预先确定的存在响应关系的状态与事件对应的处理函数标识和转换的下一状态,确定出所述状态机当前的状态和所述当前生成的事件对应的处理函数标识以及转换的下一状态,并
该专利技术资料仅供研究查看技术是否侵权等信息,商用须获得专利权人授权。该专利全部权利属于福建星网锐捷网络有限公司,未经福建星网锐捷网络有限公司许可,擅自商用是侵权行为。如果您想购买此专利、获得商业授权和技术合作,请联系【客服】
本文链接:http://www.vipzhuanli.com/pat/books/201010193439.2/2.html,转载请声明来源钻瓜专利网。
- 上一篇:一种基于蓝牙技术的多点温度监控系统
- 下一篇:一种风力发电机老化测试装置