Linux内核的定时器使用

Linux内核中提供一个定时器机制,我们只需要申请一个 struct time_list timing;

系统初始化定时器 init_timer( &timing)

struct timer_list {
      struct list_head entry;

      //定时值基于jiffies
      unsigned long expires;

      //定时器内部值
      struct tvec_base *base;

      //定时器处理函数
      void (*function)(unsigned long);

      //定时器处理函数参数
      unsigned long data;

      ……
};

可以看到timer_list中,expires是超时时间,jiffires是当前系统时间,function是超时之后执行的函数句柄,data是function的参数

在声明和初始化了timing之后,需要去对timing的data, function, expires赋值

struct timer_list timing;
init_timer(&timing);
timing.data = (unsigned long) something;
timing.function = polling_handler;
timing.expires = jiffies + 2 * HZ;

之后自己去定义void polling_handler(unsigned long data)

在需要开启定时器的地方,add_timer(&timing);

最后关闭定时器,del_timer(&timing);

周期性的执行只需在polling_handler中加入add_timer(&timing)即可

简单的定时器使用就是这样

原文地址:https://www.cnblogs.com/noanswer/p/3294246.html