Linux定时器的简单使用

一、基本概念

  1. 定时器概念

    内核定时器是内核用来控制在未来某个时间点(基于jiffies)调度执行某一个函数的机制。

  2. 源码位置

    kernel/kernel/timer.c
    kernel/include/linux/timer.h
    
  3. 主要概念说明

    (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定时器的简单使用相关推荐

  1. linux系统下定时备份,在Linux系统中简单地实现定时备份的方法 -电脑资料

    运行一个简单的脚本 假设你有一个脚本叫:/usr/local/bin/myscript. ,你想要每隔一小时就运行一次, Service 文件 第一步,创建一个service文件,根据你Linux的发 ...

  2. Linux定时器:无节拍机制tickless(CONFIG_NO_HZ)

    Linux定时器:无节拍机制tickless(CONFIG_NO_HZ) BAT-Battle 2013-09-01 Tickless 机制是Linux 内核中引入的新定时机制 以前,Linux内核会 ...

  3. Linux定时器执行

    Linux定时器执行 Linux系统的定时器执行命令:crontab 1.参数选项: -e:编辑定时执行内容 -l:显示当前定时执行内容 -r:删除当前定时执行内容 -i:在删除用户的crontab之 ...

  4. linux上的定时器上的jiffies,linux定时器和Jiffies汇.doc

    linux定时器和Jiffies汇 1.linux HZ Linux核心几个重要跟时间有关的名词或变数,将介绍HZ.tick与jiffies. HZ Linux核心每隔固定周期会发出timer int ...

  5. 用C语言编写一个Linux下的简单shell程序

    这是一个简单的C程序,展示了如何进行系统调用执行logout cd ls pwd pid rm mkdir mv cp等命令,这是一个简单的命令解释程序shell,其源代码如下: #include & ...

  6. 二十二、linux定时器

    一.Linux 定时器介绍 在 Linux 内核中, 定时器叫做内核定时器, 内核定时器用于控制某个函数, 也就是定时器将要处理的函数在未来的某个特定的时间内执行. 内核定时器注册的处理函数只执行一次 ...

  7. linux 虚拟机大量udp请求失败_理解 Linux 网络栈:Linux 网络协议栈简单总结分析...

    1. Linux 网络路径 1.1 发送端 1.1.1 应用层 (1) Socket 应用层的各种网络应用程序基本上都是通过 Linux Socket 编程接口来和内核空间的网络协议栈通信的.Linu ...

  8. 配置linux服务器做简单的路由器

    配置linux服务器做简单的路由器       任务:使用 Linux服务器配置路由器. 目标:实现单位两个网段:192.168.1.0/24和192.168.2.0/24两个网段互相访问. 步骤: ...

  9. 嵌入式linux系统下简单守护进程(daemon)的编写

    最近公司项目需要,需要在我们的嵌入式linux设备中创建一个守护进程,用于保护系统中的主进程,防止某些不可预期的意外导致主进程异常结束后,系统完全宕机没有任何反应,破坏用户体验感.但是,查阅诸多资料之 ...

  10. linux上用的端口转发工具,linux下最简单好用的的端口转发工具

    linux下最简单好用的的端口转发工具 解压安装 tar zxvf rinetd.tar.gz make make install 编辑配置 vi /etc/rinetd.conf 0.0.0.0 8 ...

最新文章

  1. SVO中 Inverse Compositional Image Alignment方法的学习笔记
  2. easy-mock本地部署成功,访问报错:EADDRNOTAVAIL 0.0.0.0:7300 解决方案
  3. retinaface查看样本
  4. Dojo-API介绍
  5. Color types not allowed (at ‘drawable’ with value ‘#f0f0f0’)
  6. linux抓post命令,Linux 使用curl发起post请求的4个常用方式
  7. system.setin_Java System类setIn()方法及示例
  8. 关于document.cookie的使用javascript
  9. 测试用例管理工具-TestLink
  10. 教孩子学编程python语言pdf_教孩子学编程 PYTHON语言版 PDF 下载
  11. X Chen笔记---Centos安装使用xmr-stack-cpu教程
  12. java运行无法加载主类_java运行显示“找不到或无法加载主类”的解决办法(linux)...
  13. 400企业智能服务器,全球领先的企业级服务器、存储、融合系统及解决方案-H3C与HPE...
  14. Servlet开发验证码
  15. 谷歌人工智能设计的芯片揭示什么是智能的本质
  16. 西安电子科技大学计算机类考研数据速览
  17. 高德数据下载器 POI,道路(含路况信息),切片数据
  18. 盘点人工智能重点技术领域
  19. 《Migrating to Cloud-Native Application Architectures》学习笔记之Chapter 3. Migration Cookbook...
  20. 讲个鬼故事:小灰的体检报告出来了。。。

热门文章

  1. WeChat 隐私政策
  2. Sailfish预研结果
  3. java多线程生产消费者_JAVA多线程实现生产者消费者的实例详解
  4. Java随机生成_0--2π_使用随机数计算PI
  5. HBase的两种协处理器
  6. RabbitMQ-理解消息通信-虚拟主机和隔离
  7. Vue.js 关于router传参那点事儿
  8. 敏捷开发用户场景分析
  9. minio  nginx 配置
  10. 在没有上传服务器端的情况下看到上传图片的效果图window.createObjectURL