让你提前认识软件开发(21):C程序中的定时器
版权声明:本文为博主原创文章。对文章内容有不论什么意见或建议。欢迎与作者单独交流。作者QQ(微信):245924426。 https://blog.csdn.net/zhouzxi/article/details/25834761
第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)
(本系列文章每周更新两篇。敬请期待!本人微博: topnav=1&wvr=5" rel="nofollow">http://weibo.com/zhouzxi? topnav=1&wvr=5
让你提前认识软件开发(21):C程序中的定时器的更多相关文章
- 让你提前认识软件开发(23):怎样在C语言中运行shell命令?
第1部分 又一次认识C语言 怎样在C语言中运行shell命令? [文章摘要] Linux操作系统具备开源等诸多优秀特性,因此在很多通信类软件(主流开发语言为C语言)中,开发平台都迁移到了Linux上, ...
- 让你提前认识软件开发(19):C语言中的协议及单元測试演示样例
第1部分 又一次认识C语言 C语言中的协议及单元測试演示样例 [文章摘要] 在实际的软件开发项目中.常常要实现多个模块之间的通信.这就须要大家约定好相互之间的通信协议,各自依照协议来收发和解析消息. ...
- 开发微信小程序中SSL协议的申请、证书绑定、TLS 版本处理等
在上篇随笔<基于微信小程序的系统开发准备工作>介绍了开发微信小程序的一些前期的架构设计.技术路线 .工具准备等方面内容,本篇随笔继续这个步骤,逐步介绍我们实际开发过程中对SSL协议的申请及 ...
- 让你提前认识软件开发(17):makefile文件的书写及应用
第1部分 又一次认识C语言 makefile文件的书写及应用 [文章摘要] makefile用于Linux下整个project的编译.对于Linux下的C/C++语言的编译是至关重要的. 本文以实际的 ...
- 让你提前认识软件开发(31):数据库脚本中的begin与end
版权声明:本文为博主原创文章.对文章内容有不论什么意见或建议,欢迎与作者单独交流.作者QQ(微信):245924426. https://blog.csdn.net/zhouzxi/article/d ...
- 让你提前认识软件开发(35):怎样改动SQL脚本以完毕需求?
第2部分 数据库SQL语言 怎样改动SQL脚本以完毕需求? SQL脚本的改动和C语言代码的改动流程是一样的,都要遵循下面步骤: 第一步,阅读需求.弄清楚自己要完毕什么功能. ...
- 开发微信小程序 中遇到的坑 及解决方法
1.wx.request 只能访问 https 解决: 新建项目 不填appid 即可访问 localhost 2.页面中多重三元表达式 解析有问题 解决: <!--{{index}} { ...
- 软件开发V型号
RAD(rap application development),就是软件开发过程中的一个重要模型,称为高速应用开发模型.其模型构图形似字母V,所以又称V模型. 他通过开发和測试同一时候进行 ...
- [No0000138]软件开发基础知识
1. 本文目的 本文目的在于,介绍软件开发的各种基础知识 以实现,看了之后,对于软件开发的很多领域的基础知识有所了解 如此在进行后续的真正的软件开发时,遇到各种细节知识,才会明白由来和背景知识 第 1 ...
随机推荐
- Java爬虫框架Jsoup学习记录
Jsoup的作用 当你想获得某网页的内容,可以使用此框架做个爬虫程序,爬某图片网站的图片(先获得图片地址,之后再借助其他工具下载图片)或者是小说网站的小说内容 我使用Jsoup写出的一款小说下载器,小 ...
- [leetcode](4.21)3. 最长重复子串
给定字符串 S,找出最长重复子串的长度.如果不存在重复子串就返回 0. 示例 1: 输入:"abcd" 输出:0 解释:没有重复子串. 示例 2: 输入:"abbaba& ...
- Java学习笔记之——static关键字
static属于类的,不属于任何一个对象的 static关键字的应用场景: 1.静态代码块:在类下用static修饰的代码块 static{ 代码: } 只能执行一次,是在第一次使用类之前执行 类加载 ...
- EL表达式的特性
一.EL(Expression Language)表达式语言一.作用:从作用域中取值,再将值显示给客户 二.目的:在JSP中消灭java代码 三.使用:<%@ page isELIgnored= ...
- mysql length和char_length
length和char_length都是为了统计字符串的长度,length是按照字节来统计,char_lenght是按照字符来统计. 位(bit):计算机储存的最小单位. 字节(byte):计算机处理 ...
- 四个O(n^2)级别的排序性能测试
测试环境为DEV-C++,并且选择排序,插入排序,冒泡排序,均为优化后的,若想了解具体优化过程,请参照:https://blog.csdn.net/qq_40164152 测试用例: #ifndef ...
- mapper代理开发步骤
1:先写Mapper接口,UserMapper.java 2:然后遵循4条开发规范,写映射文件,UserMapper.xml 3:将映射文件,UserMapper.xml加入到SqlMapConfig ...
- 前端入门6-JavaScript客户端api&jQuery
本篇文章已授权微信公众号 dasu_Android(大苏)独家发布 声明 本系列文章内容全部梳理自以下四个来源: <HTML5权威指南> <JavaScript权威指南> MD ...
- 前端入门4-CSS属性样式表
本篇文章已授权微信公众号 dasu_Android(大苏)独家发布 声明 本系列文章内容全部梳理自以下四个来源: <HTML5权威指南> <JavaScript权威指南> MD ...
- es6 语法 (map、set和array 的对比)
//数据结构对比 增查改删 { //map和array对比 let map = new Map(); let array = []; //增 map.set('t',1); array.push({t ...