司智勇,张 鹏,张 杰
(1.郑州铁路职业技术学院,河南 郑州 450052;2.中铁七局郑州工程有限公司,河南 郑州 450000)
采用定时器复用技术实现异步处理的方法
司智勇1,张 鹏1,张 杰2
(1.郑州铁路职业技术学院,河南 郑州 450052;2.中铁七局郑州工程有限公司,河南 郑州 450000)
在多任务、多线程环境下,设计有时间间隔的任务序列需要利用定时器进行编程。提出了使用单一定时器控件实现异步处理任务序列以及复杂的嵌套定时任务的算法,并且给出了通用的程序原理图。该算法占用设备资源少,具有较高的可靠性,易于维护。
异步处理;任务序列;定时器;控件复用
在多任务、多线程的编程环境下,采用面向对象的程序设计方法解决问题已经越来越普遍。在程序运行中追求速度快、效率高的同时,很多情况下会设计一定的延时解决某些应用需要,或者更可靠地实现需要异步处理的任务序列。使用单定时器解决单任务,算法比较简单。解决多定时任务时很容易理解的方法是使用多个定时器,但是随着定时器的增多,系统资源占用率也会随之提高,并且管理及维护的难度也会随之增加。那么,是否可以利用定时器控件复用的技术来解决多定时任务序列以及嵌套定时任务呢?实践表明,这种算法提高了资源利用率,程序实现简洁可靠。
几乎所有的面向对象的程序设计环境下,都提供了定时器控件。定时器的用法很简单,先设置时间数作为时间间隔,一般情况下为毫秒级。当该定时器被激活后,通常情况下置使能属性为真时,开始倒计时,到达设置时间间隔后,系统会触发定时器事件继而完成事先设计的操作任务。同时在默认情况下,定时器会自动恢复所设置的时间间隔,开始下一次循环操作。若不想循环作用,可以设置该定时器休眠,使能属性为假或修改时间间隔为0即可。
2.1 单一定时器异步处理不同时间间隔的并行任务序列
从上述的定时器的工作方法来看,一个定时器处理一个任务是非常容易实现的。但如果仅采用单一的定时器来实现多种定时任务,就需要增加一些机制来完成。下面我们以一个不同时间间隔的并行任务列表来说明,任务描述如下:
时间间隔a,任务a;时间间隔b,任务b;……时间间隔x,任务x。这些任务不分先后,可以多次执行,不需要循环执行。
实现以上任务,增加一个任务标记来区分不同的任务是解决这个问题的核心。因此,可以设置一个全局变量TaskMark,类型采用字符型,易读性较好。这样,对不同的任务设置不同的标记,在定时中断时,根据不同的标记,采取相应的操作,处理不同的任务。任务并行存在,处理任务时根据需要,不分先后。算法原理图见图1。
调用定时器 定时器事件
图1 单一定时器实现并行任务
从原理图可以看出,我们在程序设计时,可根据实际需要随时调用同一定时器实现不同的任务,能够实现重复调用,由于是并行设计,也可以实现交叉调用。
2.2 单一定时器异步处理不同时间间隔的串行任务序列
采用同样的机制,单一定时器也可以实现不同时间间隔的串行任务序列,任务描述如下:
任务0,时间间隔1;任务1,时间间隔2;任务2……时间间隔n;任务n。这些任务需要按照先后顺序严格地执行,可以多次执行,不需要循环执行。
实现以上序列任务,除了采用全局变量TaskMark以外,还需要在每个任务完成后重置任务标记及时间间隔,立即调用定时器以完成下一任务,直至最后一个任务完成为止,休眠该定时器即可。算法原理图见图2。
图2 单一定时器实现串行任务
任务1、2、……、n是需要连续完成的,中间加上短暂的停顿是为了保障每个任务的先后顺序执行的可靠性。目前流行的操作系统均为多任务、多线程的平台,为了提高速度,系统自有一套任务调度分析执行机制,没有设计时的干预,程序运行时会造成任务执行乱序,不能达到理想的运行效果。从原理图可以看出,采用定时器复用技术,用单一的定时器消耗很少的系统资源就能解决这一问题。若将每个时间间隔参数设置为极小(实践证明,10 ms就可以达到目的),基本上感觉不到程序执行的延时,然而却极大地保障了程序执行的可控性。
2.3 单一定时器实现嵌套定时任务
程序设计时,有时难免会需要定时地、反复地、周期性地执行一些任务,这样的周期任务是否也能嵌套在同一个定时器事件内呢?答案是肯定的,将上述原理图中的休眠定时器模块局部替换为周期任务即可实现嵌套,下面给出替换原理图,见图3。
图3 单一定时器实现嵌套任务
应该注意的是,定时器控件提供的时间间隔都有最大值,若想设置更大范围的时间间隔,需要另外指定全局变量Tms,这是一个整数类型,启用时可设初值为0,每次定时器事件控制其增加1,指定截止条件即可完成m倍于标准定时器时间间隔的延时。下面是实现超长时间间隔的周期任务原理图,见图4。
图4 单一定时器实现超长定时
2.4 单一定时器实现混合任务
程序设计时,往往是多类型定时任务混合存在,其复杂性不言而喻。然而,经过前述的单类型任务分解处理,对综合的复杂任务完成起来也就顺理成章,有章可循了。我们针对前述原理图根据实际需要进行对应的叠加、嵌套、替换和合并,可以形成复用单一定时器来处理混合任务的原理图,下面仅给出定时器事件部分,见图5。
图5 单一定时器实现混合任务
本研究虽然详尽阐述了使用单一定时器复用技术完成各种类型定时任务的方法,也给出了复杂的混合任务的解决方案,但有一点是不能忽略的:当有需求为两个及以上的定时任务以不同的时间间隔同时进行时,通常情况下采用单一定时器解决起来比较复杂,可靠性会降低,要视具体情况再具体分析,这也是本研究的局限性所在。
[1]孔庆彦,韩雪娜,张辉.VisualBasic程序设计与应用[M].北京:中国铁道出版社,2015.[2][美]BenKlemens著,赵铁成,徐波,译.C程序设计新思维[M].北京:人民邮电出版社,2015.
[3]姚崇华,姜新红,程凌宇,等.多线程应用中的定时器管理算法,计算机工程,2010,36(2):75-77.
[责任编辑:赵 伟]
Method for Realizing Asynchronous Processing by Using Timer Multiplexing Technology
SI Zhiyong1,ZHANG Peng1,ZHANG Jie2
((1.Zhengzhou Railway Vocational and Technical College, Zhengzhou 450052,China;2. Zhengzhou Engineering Corporation Limited of China Railway 7th Bureau , Zhengzhou 450000,China)
In the multi task and multi thread environment, the design of time interval of the task sequence needs to use the timer programming. This paper proposes an algorithm that uses a single timer control to implement asynchronous processing tasks and complex nested timing tasks. This algorithm occupies less equipment resources, has high reliability, easy to maintain.
asynchronous processing; task sequence; timer; control multiplexing
2016 - 03 - 03
司智勇(1969—),男,河南新郑人,郑州铁路职业技术学院网络信息技术中心讲师,硕士,研究方向为计算机技术、网络应用。 张鹏(1981—),男,河南郑州人,郑州铁路职业技术学院网络信息技术中心助教,研究方向为计算机技术、网络安全。 张杰(1978—),男,河南滑县人,中铁七局集团郑州工程有限公司工程师,研究方向为工程技术。
TP301.6
A
1008-6811(2016)03-0012-03