Linux内核定时器-- timer_list

一.概述

      内核经常要推后执行某些代码,如底半部机制就是为了将工作推后执行。timer_list为我们提供一种方式,使工作能够在指定时间点上执行。

      定时器使用简单,只须执行一些初始化工作,设置一个超时时间,指定超时发生后执行的函数,然后激活定时器就可以了。

      定时器并不是周期运行的,它在超时后就自行销毁,这就是这种定时器被称为动态定时器的原因。动态定时器不断地创建和销毁,而且它的运行次数也不受限制。


二.头文件

linux/timer.h


三.结构体数据类型

struct timer_list {
     struct list_head entry; //定时器链表的入口
     unsigned long expires; //定时器超时时的节拍数
     void (*function)(unsigned long ); //定时器处理函数
     unsigned long data; //传给定时器处理函数的长整型参数
     struct tvec_t_base_s *base; //定时器内部值,用户不要使用
#ifdef CONFIG_TIMER_STATS
     void *start_site;
     char start_comm[16];
     int start_pid;
#endif
}; 

四.函数接口

 

①主要相关的API函数

init_timer(struct timer_list*):定时器初始化函数;
add_timer(struct timer_list*):往系统添加定时器;
mod_timer(struct timer_list *, unsigned long jiffier_timerout):修改定时器的超时时间为jiffies_timerout;
timer_pending(struct timer_list *):定时器状态查询,如果在系统的定时器列表中则返回1,否则返回0;
del_timer(struct timer_list*):删除定时器

②初始化

 struct timer_list my_timer;  
  init_timer(&my_timer);// 初始化定时器  
  my_timer.expires = jiffies + delay; //  
  my_timer.data = 0; //  
  my_timer.function = my_function; //  
  add_timer(&my_timer); //最后,激活定时器
                                       


五.使用方法

       使用的一般步骤为:

              如果要完成周期性的重复工作,只要在初始化的基础上,在超时函数my_function内部加上以下代码,重新更新参数

  my_timer.expires = jiffies + delay; //  
  my_timer.data = 0; //  
  my_timer.function = my_function; //  
  add_timer(&my_timer); //激活定时器
             这样就能实现周期运行my_function函数了

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值