Linux定时器的简单使用
Linux定时器的简单使用
一、基本概念
定时器概念
内核定时器是内核用来控制在未来某个时间点(基于jiffies)调度执行某一个函数的机制。
源码位置
kernel/kernel/timer.c kernel/include/linux/timer.h
主要概念说明
(1)结构体struct timer_list
//与4.14内核相比,该结构发生了变化,去除了data结构变量; struct timer_list {/** All fields that change during normal runtime grouped to the* same cacheline*/struct hlist_node entry;//用来链接多个定时器组成双向链表unsigned long expires;//需要设置的定时时间void (*function)(struct timer_list *);//定时器回调函数u32 flags;#ifdef CONFIG_LOCKDEPstruct lockdep_map lockdep_map; #endif };
(2) 相关函数说明
定时器API 简要说明 timer_setup(timer, callback, flags) 初始化定时器函数,参数分别为定时器实例对象、回调函数、flag add_timer(struct timer_list *timer) 添加定时器 mod_timer(struct timer_list *timer, unsigned long expires) 修改定时器,用于修改定时器的到期时间,在新的被传入的 expires 到来后才会执行定时器函数 del_timer(struct timer_list * timer) 删除定时器
二、以一个简单的例子来说明
struct timer_list mytimer;
int i = 0;
//定时器超时处理函数
static void mytimer_handle(struct timer_list *t)
{printk("The timer has happened %d times!\n", i);//这里需要说明的是,定时器在超时后会自动在系统中删除,也就是说如果定义了一个1s后执行的定时器//1s后定时器到期后将会在系统中删除,无法完成周期性的定时任务;//如果想要周期性执行,需要在超时处理函数中再次修改下定时器到期时间;
// mod_timer(&mytimer, jiffies + HZ);i++;
}static int __init timer_init(void)
{printk("mytimer init!!\n");timer_setup(&mytimer, mytimer_handle, 0);//(1)初始化定时器mytimer,并设置超时处理函数mytimer.expires = jiffies + HZ;//(2)设置超时时间,1sadd_timer(&mytimer);//(3)将定时器mytimer添加到系统中return 0;
}static void timer_exit(void)
{printk("mytimer exit!!\n");del_timer(&mytimer);//(4)退出时删除定时器
}
三、案例输出说明
在超时处理函数中增加mod_timer函数修改定时器到期时间的输出如下:(每一秒都会执行定时器超时处理函数)
在超时处理函数中不增加mod_timer函数修改定时器到期时间的输出如下:(只处理一次)
Linux定时器的简单使用相关推荐
- linux系统下定时备份,在Linux系统中简单地实现定时备份的方法 -电脑资料
运行一个简单的脚本 假设你有一个脚本叫:/usr/local/bin/myscript. ,你想要每隔一小时就运行一次, Service 文件 第一步,创建一个service文件,根据你Linux的发 ...
- Linux定时器:无节拍机制tickless(CONFIG_NO_HZ)
Linux定时器:无节拍机制tickless(CONFIG_NO_HZ) BAT-Battle 2013-09-01 Tickless 机制是Linux 内核中引入的新定时机制 以前,Linux内核会 ...
- Linux定时器执行
Linux定时器执行 Linux系统的定时器执行命令:crontab 1.参数选项: -e:编辑定时执行内容 -l:显示当前定时执行内容 -r:删除当前定时执行内容 -i:在删除用户的crontab之 ...
- linux上的定时器上的jiffies,linux定时器和Jiffies汇.doc
linux定时器和Jiffies汇 1.linux HZ Linux核心几个重要跟时间有关的名词或变数,将介绍HZ.tick与jiffies. HZ Linux核心每隔固定周期会发出timer int ...
- 用C语言编写一个Linux下的简单shell程序
这是一个简单的C程序,展示了如何进行系统调用执行logout cd ls pwd pid rm mkdir mv cp等命令,这是一个简单的命令解释程序shell,其源代码如下: #include & ...
- 二十二、linux定时器
一.Linux 定时器介绍 在 Linux 内核中, 定时器叫做内核定时器, 内核定时器用于控制某个函数, 也就是定时器将要处理的函数在未来的某个特定的时间内执行. 内核定时器注册的处理函数只执行一次 ...
- linux 虚拟机大量udp请求失败_理解 Linux 网络栈:Linux 网络协议栈简单总结分析...
1. Linux 网络路径 1.1 发送端 1.1.1 应用层 (1) Socket 应用层的各种网络应用程序基本上都是通过 Linux Socket 编程接口来和内核空间的网络协议栈通信的.Linu ...
- 配置linux服务器做简单的路由器
配置linux服务器做简单的路由器 任务:使用 Linux服务器配置路由器. 目标:实现单位两个网段:192.168.1.0/24和192.168.2.0/24两个网段互相访问. 步骤: ...
- 嵌入式linux系统下简单守护进程(daemon)的编写
最近公司项目需要,需要在我们的嵌入式linux设备中创建一个守护进程,用于保护系统中的主进程,防止某些不可预期的意外导致主进程异常结束后,系统完全宕机没有任何反应,破坏用户体验感.但是,查阅诸多资料之 ...
- linux上用的端口转发工具,linux下最简单好用的的端口转发工具
linux下最简单好用的的端口转发工具 解压安装 tar zxvf rinetd.tar.gz make make install 编辑配置 vi /etc/rinetd.conf 0.0.0.0 8 ...
最新文章
- SVO中 Inverse Compositional Image Alignment方法的学习笔记
- easy-mock本地部署成功,访问报错:EADDRNOTAVAIL 0.0.0.0:7300 解决方案
- retinaface查看样本
- Dojo-API介绍
- Color types not allowed (at ‘drawable’ with value ‘#f0f0f0’)
- linux抓post命令,Linux 使用curl发起post请求的4个常用方式
- system.setin_Java System类setIn()方法及示例
- 关于document.cookie的使用javascript
- 测试用例管理工具-TestLink
- 教孩子学编程python语言pdf_教孩子学编程 PYTHON语言版 PDF 下载
- X Chen笔记---Centos安装使用xmr-stack-cpu教程
- java运行无法加载主类_java运行显示“找不到或无法加载主类”的解决办法(linux)...
- 400企业智能服务器,全球领先的企业级服务器、存储、融合系统及解决方案-H3C与HPE...
- Servlet开发验证码
- 谷歌人工智能设计的芯片揭示什么是智能的本质
- 西安电子科技大学计算机类考研数据速览
- 高德数据下载器 POI,道路(含路况信息),切片数据
- 盘点人工智能重点技术领域
- 《Migrating to Cloud-Native Application Architectures》学习笔记之Chapter 3. Migration Cookbook...
- 讲个鬼故事:小灰的体检报告出来了。。。