zoukankan      html  css  js  c++  java
  • linux kernel中timer的使用

    linux kernel中timer的使用 http://blog.csdn.net/njuitjf/article/details/16888821

    在kernel中如果想周期性的干些什么事情,或者某个特定时间干些什么事情,可以使用timer。
    例如像周期性地dump某段buffer的数据等等。

    先来看看使用方法。
    先定义一个struct timer_list的对象。eg: struct timer_list dump_t;
    这个对象相当于一个闹钟,其中包含了时间点,也就是什么时候激活闹钟;一个函数指针,闹钟激活后干活的地方;还有一个void 指针,在闹钟干活的时候可能需要传给它一些当前的数据。

    先看使用方法,之后再稍微深入了解一下。
    前面定义好了struct timer_list对象,接下来就需要初始化该对象。
    调用函数init_timer进行初步初始化。
    然后对结构体中的一些成员进行赋值:
      init_timer(&dump_t); // 1. 初始化
      dump_t.function = dump_function; // 2. 绑定到时候要调的函数(timer任务具体的事务)
      dump_t.data = (unsigned long) my_dev; 
      dump_t.expires = jiffies + 2*HZ;    // 3.  设置timer任务激活时间,2秒钟之后timer被激活,如果是n秒,将2*HZ改为n*HZ。
    这样就OK了么?
    当然没有,需要把timer加到timer list中,也就是要告诉系统,你申请了这么一个timer。
      add_timer(&dump_t); // 4. 告诉系统,你申请了这么一个timer。
      
    现在不明白的地方就是timer到了,干活的地方,即dump_function函数。
    函数声明:
    static void dump_function(unsigned long channel);
    其中的实现么,就随意了,看你想让这个timer干些什么活。
    注意一点,这个timer只会响应一次,因为jiffies + HZ时间点只有一个。
    如果想让此timer周期性地干活,就需要在dump_function函数中重新启动该timer。

     

    启动方法:

    dump_function ()

    {

      do_your_task();


       del_timer(&dump_t);
       dump_t.function = dump_function;
       dump_t.data = (unsigned long) mydev;
       dump_t.expires = jiffies + 2*HZ;

      add_timer(&dump_t);

    }
     

  • 相关阅读:
    CF #536div2E(dp)
    BZOJ2440(容斥+莫比乌斯函数)
    莫比乌斯反演题目结(下)
    struts 文件上传示例
    struts 文件上传示例
    struts2请求过程源码分析
    struts2请求过程源码分析
    如何快速成为数据分析师?
    如何快速成为数据分析师?
    多对多 hibernate映射
  • 原文地址:https://www.cnblogs.com/mylinux/p/5638696.html
Copyright © 2011-2022 走看看