第1部分 又一次认识C语言
C程序中的定时器
【文章摘要】
在实际的C程序中,一个模块运行多个操作是非经常见的事情。假设多个操作同一时候进行,会出现程序效率低下、计算机CPU占用率过高等情况,这时就须要对全部操作的运行顺序作一个合理的安排,这就涉及到定时器的使用。
本文对C程序中的定时器的类型、设置和清除方法等作了具体的介绍,为相关开发工作的开展提供了參考。
【关键词】
C程序 定时器 操作 开发
一、定时器的定义及分类
我们所熟悉的定时器是一个多任务定时提醒的软件,安装于电脑或手机上。
举个样例,我们经经常使用的闹钟事实上就是定时器。它会在我们设定的时间运行某种程序,在其他时间则处于休眠状态。
那么什么是C程序中的定时器呢?C程序中的定时器是程序猿编写的用于定时运行某种操作的程序。是相关C代码的集合。
这个定时器是“幕后的英雄”。我们可以看到的是软件所体现出来的某项功能,而看不见的是定时器所起的作用。
依据所起的作用的不同,C程序中的定时器分为例如以下两类:
第一类,在多个操作中设定不同操作运行顺序的定时器。在一个非常大的软件模块中。同一时候进行多个操作会减少程序的运行效率,合理地使用定时器可以让某些操作避开程序运行的“高峰期”,达到舒缓程序运行压力的作用。
这时的定时器所起的作用和在上下班时间十字路口的红绿灯的作用相似。
第二类,用于限制某种操作的运行时间。若在规定时间内没有运行该操作则作超时处理的定时器。这类定时器多用于须要和其他模块进行通信的模块中。
假设一个模块向其他模块发了一个非常重要的消息。须要等到其他模块答复后才干进行下一步的操作,那么定时器就在这个时候派上用场了。
可以在定时器中设定本模块所能“容忍”的其他模块最迟应答的时间。假设超过了这个时间。则觉得对方无应答。直接进行兴许操作。
在C程序中,合理利用定时器,可提高程序的运行效率,同一时候可让程序体现出逻辑层次感和严密性。
二、定时器的数据结构
为了完毕功能。一个典型的定时器的数据结构例如以下:
// 先重定义基本数据类型
typedef unsigned char UINT8;
typedef unsigned short int UINT16;
typedef unsigned int UINT32;
// 定时器的数据结构
typedef struct
{
……
……
UINT8 iUseFlag; // 该定时器是否正在使用
UINT8 iArrivedFlag; // 使用该定时器的时间是否已到
UINT8 iTimerType; // 该定时器的类型
UINT16 iModuleNo; // 使用该定时器的模块号/进程号等信息
UINT32 iSetTime; // 设定该定时器的启动时间, 即相对此刻, 该定时器在多长时间之后启动
UINT8 iTimerNo; // 该定时器的编号
UINT8 iQue; // 该定时器的存放队列
UINT16 iQuePrev; // 该定时器的存放位置的前一个结点
UINT16 iQueNext; // 该定时器的存放位置的后一个结点
……
……
} TimerStruc_T;
一个定时器结构体所包括的字段依据不同软件产品和项目组的要求而略有差别,但如上面结构体中罗列出来的字段都是须要的。
字段的含义见相应字段后面的凝视。
三、怎样设置和清除定时器
3.1 设置定时器的流程
在实际的软件开发项目中,一般将设置定时器的流程封装为函数。在须要设置定时器的时候,仅仅须要调用该函数就可以。
设置定时器的流程如图1所看到的。
图1 设置定时器的流程
有关此流程的说明例如以下:
(1) 在设置定时器之前。先要推断该定时器是否正在使用。
假设在使用中,那么要先清除定时器以释放资源。这是为了防止一个定时器有多种用途的情况。
(2) 在获取定时器存放资源之前,要对初始化及信息入队操作进行加锁处理。为了防止相同的资源被多个定时器获得。
3.2 清除定时器的流程
清除定时器的操作相同会被封装为函数。
在须要清除定时器的时候,仅仅须要调用该函数就可以。
清除定时器的流程如图2所看到的。
图2 清除定时器的流程
有关此流程的说明例如以下:
(1) 在清除定时器之前。先要推断该定时器是否正在使用及清除时间是否达到。假设两者中有一个不满足,则不用清除定时器。
(2) 在清除定时器相关信息之前,为了保持操作的唯一性。相同要进行加锁处理。
四、总结
随着程序功能的日益完好和丰富。不同操作运行顺序越发显得重要。这就为定时器提供了施展才干的“舞台”。
本文以作者的实际项目开发工作为背景,对C程序中的定时器的类型、设置和清除方法等作了具体的描写叙述,为相关模块的设计和程序的编写提供了故意的參考。
(欢迎訪问南邮BBS:http://bbs.njupt.edu.cn/)
(欢迎訪问重邮BBS:http://bbs.cqupt.edu.cn/nForum/index)
(本系列文章每周更新两篇。敬请期待!本人微博:http://weibo.com/zhouzxi?
topnav=1&wvr=5,微信号:245924426,欢迎关注!)