zoukankan      html  css  js  c++  java
  • linux内核定时器

    struct list_head {

            struct list_head *next, *prev;

    }

    定时器(内核定时器、动态定时器)由结构timer_list表示,定义在文件linux/timer.h中。

    struct timer_list {

                struct list_head entry; /* 定时器链表的入口 */

                unsighed long expires; /* 以jiffies为单位的定时值 */

                spinlock_t lock; /* 保护定时器的锁 */

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

                unsighed long data; /* 传给处理函数的长整形参数 */

                struct tvec_t_base_s *base; /* 定时器内部值,用户不要使用 */

    }

    <注:这是2.6老版本的内核定义>

    data参数使你可以用一个处理函数注册多个定时器,只要通过该参数就能够区别它们。

    内核提供了一组与定时器相关的接口来简化管理定时器的操作。这些接口的声明都在<linux/timer.h>中,大多数

    接口的实现在<kernel/timer.c>中获得实现。

    /* 创建定时器 */

    struct time_list my_timer;

    /* 初始化定时器 */

    init_timer(&my_timer);

    /* 设置定时器 */

    my_timer.expires = jiffies + delay; /* delay为定时器超时时间的节拍数 */

    my_timer.data = 0; /* 给定时器处理函数传入0值 */

    my_timer.function = my_function; /* 定时器超时调用的处理函数 */

    /* 激活定时器 */

    add_timer(&my_timer);

    /* 修改定时器的超时时间 */

    mod_timer(&my_timer, jiffies + new_delay); /* 如定时器未被激活,则激活它,返回0;否则,返回1 */

    /* 删除定时器 */

    del_timer(&my_timer); /* 定时器未被激活时,返回0;否则,返回1

    /* 删除定时器的同步方法 */

    del_timer_sync(&my_timer); /* 以同步的方式删除定时器,防止它同时在多个cpu上使用 */

    /* 实现定时器处理函数 */

    void my_timer_function(unsigned long data)

    {

        printk(KERN_EMERG“Current jiffies is %lu\n", jiffies);

    }

  • 相关阅读:
    Mysql事务的隔离级别,ACID以及三要素的取舍(强一致性弱一致性)、ABA问题
    符合python风格的对象
    python重载运算符之左add右add(radd)
    pycham快捷键
    设置linux时间同步
    描述克隆linux的步骤,以及后续配置
    linux命令
    ransientException: find no Route:SELECT * FROM `ego`.`tb_content_category` LIMIT 0,1000‘
    linux修改vim /etc/profile 配置文件 修改不了
    web.xml
  • 原文地址:https://www.cnblogs.com/aiwz/p/6333408.html
Copyright © 2011-2022 走看看