偷得浮生半桶水(半日闲), 好记性不如抄下来(烂笔头). 信息爆炸的时代, 学习是一项持续的工作.
全部博文(1750)
分类: 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);