Chinaunix首页 | 论坛 | 博客
  • 博客访问: 9146996
  • 博文数量: 1726
  • 博客积分: 12961
  • 博客等级: 上将
  • 技术积分: 19850
  • 用 户 组: 普通用户
  • 注册时间: 2009-01-09 11:25
个人简介

偷得浮生半桶水(半日闲), 好记性不如抄下来(烂笔头). 信息爆炸的时代, 学习是一项持续的工作.

文章分类

全部博文(1726)

文章存档

2024年(2)

2023年(26)

2022年(112)

2021年(217)

2020年(157)

2019年(192)

2018年(81)

2017年(78)

2016年(70)

2015年(52)

2014年(40)

2013年(51)

2012年(85)

2011年(45)

2010年(231)

2009年(287)

分类: Android平台

2013-08-12 10:56:31

struct timer_list {
 struct list_head list;
 unsigned long expires; //定时器到期时间
 unsigned long data; //作为参数被传入定时器处理函数
 void (*function)(unsigned long);   
  struct timer_base_s *base;
 };

timer的API函数:

初始化定时器    
    void init_timer(struct timer_list * timer);

增加定时器    
    
void add_timer(struct timer_list * timer);

删除定时器    
    
int del_timer(struct timer_list * timer);
    
int del_timer_sync(struct timer_list * timer); //需要确保定时器函数当前不在其他cpu上运行。

修改定时器的expire    
    int mod_timer(struct timer_list *timer, unsigned long expires);


使用定时器的一般流程为:

(1)创建timer、编写function;

(2)为timer的expires、data、function赋值;

(3)调用add_timer将timer加入列表;

(4)在定时器到期时,function被执行


(5)在程序中涉及timer控制的地方适当地调用del_timer、mod_timer删除timer或修改timer的expires。
////////////////////// demo ///////////////////////////////////////////

#include
#include
#include

MODULE_LICENSE("GPL");
struct timer_list mytimer;

void  mytimer_ok(unsigned long expires)
{
    printk("Mytimer is ok\n");    
    mod_timer(&mytimer, 1000);
}

static int __init hello_init (void)
{   
    printk("Hello module init\n");
    init_timer(&mytimer);
   
    mytimer.expires = 10000;
    mytimer.function = mytimer_ok;
   
    add_timer(&mytimer);
    return 0;
}

static void __exit hello_exit (void)
{
    del_timer(&mytimer);
    printk("Hello module exit\n");
}

module_init(hello_init);
module_exit(hello_exit);

 

阅读(2343) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~