CN102375759B - 利用有限状态机防止代码重入的方法 - Google Patents
利用有限状态机防止代码重入的方法 Download PDFInfo
- Publication number
- CN102375759B CN102375759B CN201010260275.0A CN201010260275A CN102375759B CN 102375759 B CN102375759 B CN 102375759B CN 201010260275 A CN201010260275 A CN 201010260275A CN 102375759 B CN102375759 B CN 102375759B
- Authority
- CN
- China
- Prior art keywords
- state machine
- trigger event
- state
- node
- message
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Expired - Fee Related
Links
Abstract
本发明公开了一种利用有限状态机防止代码重入的方法,其包括以下步骤:S1、定义状态机,以及状态机的各个状态结点的数据结构;S2、当有触发事件发给该状态机时,判断状态机当前处于何种状态,然后查询该状态响应的触发事件类型;S3、如果查找到相同的触发事件,就调用相应的处理函数,同时将状态标识置为对应的下一结点;否则直接抛弃该触发事件不作任何处理。本发明在不同的状态定义不同的触发事件或消息,这样可有效的防止代码重入,提高系统稳定性。
Description
技术领域
本发明涉及一种利用有限状态机防止代码重入的方法,特别是涉及一种在手机操作系统中、尤其是大唐Arena平台软件架构中,利用有限状态机防止代码重入的方法。
背景技术
Arena操作系统是由我国大唐移动自主研发的手机操作系统。目前Arena得到了国内和韩国厂商的支持。Arena由大唐移动主导开发,目前主要应用于TD-SCDMA手机,已经有超过10款2G,2.5G和3G手机终端使用了该操作系统。大唐arena平台集成了MINIGUI人机交互界面处理机制,此机制采用消息机制处理按键、中断等外部事件。MiniGUI是由北京飞漫软件技术有限公司创办的开源Linux图形用户界面支持系统,经过近些年的发展,MiniGUI已经发展成为比较成熟的性能优良的、功能丰富的跨操作系统的嵌入式图形界面支持系统。
当用户“暴力”使用或测试时就会出现函数或线程代码重入,这样对系统的稳定性、健壮性影响极大。例如用户通过按键(OK键)进入一个应用程序,此应用程序收到按键消息后会有一系统后台操作(网络连接等),此时用户立刻按退出键(例如POWER键等),应用程序返回到IDLE界面,但后台还在处于运行状态,此时用户再次进入应用程序时,整个应用程序就处于重复运行中。就会出现出现紊乱,因为Arena操作系统平台处理中有些部分是不允许重入的,所以会出现定屏,死机或不可预知的状态。其中,可重入代码(Reentrycode)也叫纯代码(Purecode)是一种允许多个进程同时访问的代码。为了使各进程所执行的代码完全相同,故不允许任何进程对其进行修改。程序在运行过程中可以被打断,并由开始处再次执行,并且在合理的范围内(多次重入,而不造成堆栈溢出等其他问题),程序可以在被打断处继续执行,且执行结果不受影响。代码重入是编程中一种正常的应用,但对于某些不支持代码重入的手机操作系统,比如大唐Arena系统中,如果出现代码重入,就可能会出现定屏,死机或不可预知的状态。
以用户在流媒体(比如进行视频播放)播放界面触发播放按键事件为例。系统调用平台接口并进行一系列的网络操作。由于此流程是异步操作过程,即程序主线发出请求之后就做别的操作了,完全不理会请求执行的如何。用户第一次按了播放键之后,在正式播放前用户又一次触发了播放按键事件,系统会做相同的处理,如此这样的频繁操作多次,整个系统的时序关系就会错乱,导致一些不可预期的结果,比如定屏或死机。不仅如此,有时还会出现“播放”与“退出”临界操作,播放时需要使用一些共用资源(比如同一内存区,相同音视频解码芯片等),退出时需要释放这些资源。如果出现一个时间点,后台还在播放使用共用资源,但是用户又在前台按了退出键,此时就会出现资源冲突,从而导致死机、冻屏等用户无法忍受的现象。
发明内容
本发明要解决的技术问题是为了克服现有技术中某些手机操作系统不允许代码重入的缺陷,提供一种利用有限状态机防止代码重入的方法。
本发明是通过下述技术方案来解决上述技术问题的:
一种利用有限状态机防止代码重入的方法,其特点在于,其包括以下步骤:
S1、定义状态机,以及状态机的各个状态结点的数据结构,该数据结构为:状态机名{结点1,触发事件,处理函数,下一结点},
{结点2,触发事件,处理函数,下一结点},...
{结点n,触发事件,处理函数,下一结点},n为自然数;
S2、当有触发事件发给该状态机时,判断状态机当前处于何种状态,然后查询该状态响应的触发事件类型;
S3、如果查找到相同的触发事件,就调用相应的处理函数,同时将状态标识置为对应的下一结点;否则直接抛弃该触发事件不作任何处理。
优选地,步骤S1中的触发事件为能改变当前状态的中断或者消息。
优选地,所述的消息为按键消息、定时器消息和/或网络响应消息。
优选地,步骤S1中的处理函数为当前状态收到触发事件后需要立即执行的指令操作。
优选地,所述结点n的下一结点为结点n本身或者其它状态结点。
本发明的积极进步效果在于:本发明在不同的状态定义不同的触发事件或消息,这样可有效的防止代码重入,提高系统稳定性。比如当在网络连接状态下,网络信号不好时不会响应任何按键消息,不会出现代码重入影响系统时序关系的事件操作。同时用户第一次进行网络连接状态,无论是否“暴力”使用或测试,所有外部按键消息都会被状态机所过滤,这样大大提高了软件的稳定性、健壮性。
附图说明
图1为本发明第一实施例的流媒体状态变迁图。
图2为本发明第二实施例的在线听歌状态变迁图。
具体实施方式
下面结合附图给出本发明较佳实施例,以详细说明本发明的技术方案。
首先对有限状态机进行简单介绍,以便于后面理解本发明的技术内容和效果。有限状态机(FiniteStateMachine,FSM)或有限状态自动机或简称状态机,是表示有限个状态以及在这些状态之间的转移和动作等行为的数学模型。简单说明一下,可以这样理解,系统的行为如果在不同的时间(环境)下,其工作不同,并且行为可以分成所谓的有限的状态以及不重叠的程序块时,系统显现出了状态行为。有限状态是展示状态与状态转换的图,当探测到一个事件后,它依照当前的状态做出反应,反应包括执行一个动作和转换到新状态。每个状态可以定义状态变迁的事件或消息,这样当一个状态收到一个事件后就会迁移到另一个状态,此时若多次出现相同的事件则新状态不会做任何处理,除非新的状态也定义了此状态变迁事件。
本发明实现有限状态机管理机制如下。每个有限状态机结点由状态及触发事件等因素组成,所以首先定义每个状态结点的数据结构,如表1所示。其中触发事件通常指能改变当前状态的一些中断、消息等,例如按键消息、定时器消息、网络响应消息等。处理函数指当前状态收到此触发事件后需要立即执行的指令操作,例如应用处于A状态,当其收到OK键时就会调用平台的一系列接口(网络操作,媒体播放)等,同时改变应用运行环境(比如申请内存空间,改变全局变量值等),这些都在处理函数中进行。处理完这些操作后应用就会置为B状态(可用变量ID标识其状态),依此类推。
表1
其次,实现状态机事件处理算法如下,也即是本发明中利用有限状态机防止代码重入的方法。查询由状态ID对应的处理函数及其下一跳(也即下一状态结点),并记录活动的状态。首先定义状态机及各个状态结点数据结构(如表1所示):
状态机名{结点A,(消息a,消息b...),处理函数,下一结点},
{结点B,(消息c,消息d...),处理函数,下一结点}
...。其中消息a、b、c、d也可由其它触发事件代替,比如中断等等,不限于只用消息来触发。定义各个状态的触发事件时,可以用外部按键、合盖、中断等事件按事先划分好的状态进行分类。
需要说明的是,下一结点可以是结点本身,也可以是其它状态结点。当有消息发给此状态机时,首先判断当前是处于何状态,然后查询此状态响应的消息类型,如果查找到相同的消息就会调用相应的处理函数,同时将状态标识ID置为对应的下一状态结点,否则直接抛弃此消息不作任何处理。在手机操作系统上进行开发的技术人员,在进行手机按键之间状态变迁或者在线听歌等需要网络连接的状态变迁实现中,在编程时应用这种方法,从而避免出现背景技术中出现的技术问题。比如在在线听歌应用中,采用状态机后用户按播放键,应用进入后台运行且状态变为网络连接状态,此状态仅响应定时消息与网络响应消息(connect),即使用户再次按播放键也不会响应,这样就不会出现重入现象。
下面以两个在大唐Arena平台中的应用来说明本发明的效果,以使本发明更容易理解。本领域技术人员应当清楚,本发明不仅适用于大唐Arena平台,其他各种不支持代码重入的手机操作系统或移动终端操作系统,本发明都能应用其中,其原理都是相同的。
实施例1
如图1所示,与背景技术中的用户在流媒体(比如进行视频播放)播放界面触发播放按键事件相对比,如果采用了本发明的有限状态机将整个处理流程分为初始化、播放、退出、暂停状态,图中为符合本领域的习惯,有些按键等术语用英文表示,对应中文下文会有解释。另外,本实施例主要说明在按键状态转换中有限状态机的应用,尤其是平台响应慢的情况。初始化状态收到OK键(即OK_KEY)消息立即变迁到初始化状态,初始化状态此时不响应OK键消息,仅响应定时器(即timer)消息。这样用户反复触发OK键事件对整个系统都没有什么影响,但当初始化超过一定时间,其会从初始化状态变迁到退出状态。同理,如果在播放状态,其只响应退出键与暂停键,如果用户首次按了播放键,但由于种种原因(网络不好、线程阻塞、等待)播放界面还处理播放图标,但系统已处于播放状态,如果用户此时再次按播放键,系统不会响应。如果不采用状态机方式,系统就会又一次调用平台接口进行播放,其实系统已处于播放中。这样就会出现代码重入现象,在某些不支持代码重入的手机操作系统中,比如大唐Arena系统中,就会导致死机、冻屏现象的发生。在暂停状态的触发原理与播放相同,在此不做赘述。图中,pause_key代表暂停键,exit_key代表退出键。
实施例2
本实施例通过在线听歌实例具体说明本发明的有限状态机实施步骤及方法。本实施例主要说明在需要连接网络的应用时,各状态转换中有限状态机的应用,尤其是网络响应慢的情况。
在线听歌时首先是响应用户操作,系统会连接网络并从服务器中下载相应的歌曲,同时在UI界面标识听歌状态。为了提高实时效果系统采用边下载边解码边播放方式进行,当用户暂停或停止播放时UI界面都需要更改其状态标识。在实际操作应用中常会出现网络信息不好或用户操作频率很高的情况,这时UI界面就会出现定屏或死机。原因是系统时序关系紊乱,本实施例中采用有限状态机解决此问题,执行步骤如下。
如图2所示,首先,按业务独立性划分各个状态。例如在线听歌可分为网络连接、下载、播放、暂停、停止状态。
用户首次按键处理(即启动在线播放)后,系统由初始状态迁移为网络连接状态,此状态不响应任何按键消息,仅响应定时器(防止冻屏)与网络连接后反馈消息(即connect)。同时UI界面的在线听歌标识(正在听歌、暂停、停止、下载)仅在顺利变迁到相应的状态后才会修改,这样整个UI标识与实现后台运行保持一致,不会出现紊乱。例如如果不采用状态机用户按播放键,应用程序后台就会连接网络,如果用户反复多次按相同的播放键就会同时调用相同的处理过程,而此处理过程不允许同时调用(某些手机操作平台的自身要求),否则就会出现异常。
而采用状态机后用户按播放键,应用进入后台运行且状态变为网络连接状态,此状态仅响应定时消息(timer)与网络响应消息(connect),用户再次按播放键不会响应,这样就不会出现重入现象。同理,其它状态也如此处理。其中,stop_key代表停止键,resume_key代表继续键。
本实施例由于采用了有限状态机防止代码重入,所以当在网络连接状态下,网络信号不好时不会响应任何按键消息,不会出现代码重入影响系统时序关系的事件操作。同时用户第一次进行网络连接状态,无论是否“暴力”使用或测试,所有外部按键消息都会被状态机所过滤,这样大大提高了软件的稳定性。
虽然以上描述了本发明的具体实施方式,但是本领域的技术人员应当理解,这些仅是举例说明,本发明的保护范围是由所附权利要求书限定的。本领域的技术人员在不背离本发明的原理和实质的前提下,可以对这些实施方式做出多种变更或修改,但这些变更和修改均落入本发明的保护范围。
Claims (5)
1.一种利用有限状态机防止代码重入的方法,其特征在于,其包括以下步骤:
S1、定义状态机,以及状态机的各个状态结点的数据结构,该数据结构为:状态机名{结点1,触发事件,处理函数,下一结点},
{结点2,触发事件,处理函数,下一结点},…
{结点n,触发事件,处理函数,下一结点},n为自然数;
S2、当有触发事件发给该状态机时,判断状态机当前处于何种状态,然后查询该状态响应的触发事件类型;
S3、如果查找到相同的触发事件,就调用相应的处理函数,同时将状态标识置为对应的下一结点;若再次向该状态机发送该触发事件,则直接抛弃该触发事件不作任何处理。
2.如权利要求1所述的利用有限状态机防止代码重入的方法,其特征在于,步骤S1中的触发事件为能改变当前状态的中断或者消息。
3.如权利要求2所述的利用有限状态机防止代码重入的方法,其特征在于,所述的消息为按键消息、定时器消息和/或网络响应消息。
4.如权利要求1所述的利用有限状态机防止代码重入的方法,其特征在于,步骤S1中的处理函数为当前状态收到触发事件后需要立即执行的指令操作。
5.如权利要求1-4任一项所述的利用有限状态机防止代码重入的方法,其特征在于,所述结点n的下一结点为结点n本身或者其它状态结点。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201010260275.0A CN102375759B (zh) | 2010-08-20 | 2010-08-20 | 利用有限状态机防止代码重入的方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201010260275.0A CN102375759B (zh) | 2010-08-20 | 2010-08-20 | 利用有限状态机防止代码重入的方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN102375759A CN102375759A (zh) | 2012-03-14 |
CN102375759B true CN102375759B (zh) | 2016-08-03 |
Family
ID=45794400
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201010260275.0A Expired - Fee Related CN102375759B (zh) | 2010-08-20 | 2010-08-20 | 利用有限状态机防止代码重入的方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN102375759B (zh) |
Families Citing this family (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102682461B (zh) * | 2012-04-28 | 2015-12-09 | Tcl集团股份有限公司 | 一种动画渲染方法、系统及动画播放器 |
CN103064739B (zh) * | 2013-01-24 | 2016-07-27 | 浪潮(北京)电子信息产业有限公司 | 一种云计算中虚拟机的控制方法及装置 |
CN104239013B (zh) * | 2013-06-17 | 2018-11-30 | 上海联影医疗科技有限公司 | 基于委托的分散式状态机及其处理方法 |
CN104021043B (zh) * | 2014-06-23 | 2017-09-15 | 中国银行股份有限公司 | 批量应用程序的中断重入方法及系统 |
CN107678807A (zh) * | 2017-10-10 | 2018-02-09 | 郑州云海信息技术有限公司 | 一种软件实现状态机的方法及装置 |
CN108920217B (zh) * | 2018-03-30 | 2021-12-03 | 惠州市德赛西威汽车电子股份有限公司 | 一种减少不可重入函数的重构方法 |
Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN1946240A (zh) * | 2006-10-19 | 2007-04-11 | 华为技术有限公司 | 一种呼叫控制方法及交换设备 |
CN101309254A (zh) * | 2007-05-17 | 2008-11-19 | 上海宇梦通信科技有限公司 | 以关联并行状态机控制通讯设备多组功能的装置和方法 |
CN101702831A (zh) * | 2009-09-10 | 2010-05-05 | 厦门敏讯信息技术股份有限公司 | 无线设备及其呼叫控制方法 |
Family Cites Families (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US6868067B2 (en) * | 2002-06-28 | 2005-03-15 | Harris Corporation | Hybrid agent-oriented object model to provide software fault tolerance between distributed processor nodes |
-
2010
- 2010-08-20 CN CN201010260275.0A patent/CN102375759B/zh not_active Expired - Fee Related
Patent Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN1946240A (zh) * | 2006-10-19 | 2007-04-11 | 华为技术有限公司 | 一种呼叫控制方法及交换设备 |
CN101309254A (zh) * | 2007-05-17 | 2008-11-19 | 上海宇梦通信科技有限公司 | 以关联并行状态机控制通讯设备多组功能的装置和方法 |
CN101702831A (zh) * | 2009-09-10 | 2010-05-05 | 厦门敏讯信息技术股份有限公司 | 无线设备及其呼叫控制方法 |
Also Published As
Publication number | Publication date |
---|---|
CN102375759A (zh) | 2012-03-14 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN102375759B (zh) | 利用有限状态机防止代码重入的方法 | |
CN108132735B (zh) | 终端与应用控制方法 | |
CN111045714B (zh) | 一种固件更新方法、装置、耳机及计算机可读存储介质 | |
CN105786473A (zh) | 多任务界面的任务管理方法、装置及终端设备 | |
CN110300328B (zh) | 一种视频播放控制方法、装置及可读存储介质 | |
KR20020022085A (ko) | 응용프로그램 라이프사이클에 따른 응용프로그램 관리방법 및 장치 | |
CN106897077B (zh) | 应用程序控制方法 | |
KR101619002B1 (ko) | 휴대형 컴퓨팅 디바이스의 리소스들을 관리하기 위한 시스템 및 방법 | |
CN109698979B (zh) | 一种视频播放的方法、装置及电子设备 | |
US7567257B2 (en) | Partition-based undo of partitioned object graph | |
CN110933075B (zh) | 服务调用方法、装置、电子设备及存储介质 | |
CN106468994A (zh) | 一种应用程序的处理方法和装置 | |
US20190004884A1 (en) | Modularized Collaborative Performance Issue Diagnostic System | |
CN102541549A (zh) | 集成电视应用模块的方法及装置 | |
CN109658934A (zh) | 通过语音控制多媒体app的方法及装置 | |
CN110753040B (zh) | 一种请求处理的方法及装置 | |
JP2007265137A (ja) | マルチタスク処理方法及びマルチタスク処理装置 | |
CN106569848A (zh) | 终端及其应用程序的启动管理方法 | |
WO2022022442A1 (zh) | 数据处理方法、装置、智能网卡和服务器 | |
WO2019061619A1 (zh) | 一种避免线程阻塞的方法、装置及计算机设备 | |
CN113687942A (zh) | 检测方法、装置及电子设备 | |
CN108509223B (zh) | 一种数据处理方法、装置、系统及存储介质 | |
CN101526843B (zh) | 多微控制器系统的电源管理方法 | |
WO2024037553A1 (zh) | 一种生命周期调度的方法、装置及电子设备 | |
CN115134240B (zh) | 智能场景优化方法、装置、存储介质及电器设备 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
C14 | Grant of patent or utility model | ||
GR01 | Patent grant | ||
CF01 | Termination of patent right due to non-payment of annual fee |
Granted publication date: 20160803 Termination date: 20190820 |
|
CF01 | Termination of patent right due to non-payment of annual fee |