linux timer机制,linux timer机制

#include //#define del_work

#define workqueu

//#define hrtime

//#define list_timer

struct timer{

struct delayed_work delaywork;

struct workqueue_struct *monitor_wqueue;

struct hrtimer hrtimer;

struct work_struct workstruct;

struct timer_list timerlist;

};

void timer_work(struct work_struct *work)

{

static int count = 0;

#ifdef del_work

struct timer *timer_fun = container_of(work, struct timer, delaywork.work);

schedule_delayed_work(&timer_fun->delaywork, msecs_to_jiffies(1000));

if(count == 10){

cancel_delayed_work(&timer_fun->delaywork);

}

#endif

#ifdef workqueu

struct timer *timer_fun = container_of(work, struct timer, delaywork.work);

queue_delayed_work(timer_fun->monitor_wqueue, &timer_fun->delaywork,HZ);

if(count == 10){

cancel_delayed_work(&timer_fun->delaywork);

}

#endif

#ifdef hrtime

struct timer *timer_fun = container_of(work, struct timer, workstruct);

if(count < 10){

hrtimer_start(&timer_fun->hrtimer, ktime_set(1,0), HRTIMER_MODE_REL);

}

#endif

printk("count:%d\n",count++);

}

#ifdef hrtime

static enum hrtimer_restart hrtimer_test(struct hrtimer *handle)

{

printk("=============%s=================\n",__FUNCTION__);

struct timer *td = container_of(handle, struct timer, hrtimer);

schedule_work(&td->workstruct);

return HRTIMER_NORESTART;

}

#endif

#ifdef list_timer

static void timerlist_work(unsigned long _data)

{

struct timer *data = (struct timer *)_data;

static int count = 0;

if(count < 10){

mod_timer(&data->timerlist, jiffies + msecs_to_jiffies(1000));

}

printk("%d seconds\n",count++);

}

#endif

int __init timer_init(void)

{

struct timer *timer = NULL;

printk("==========timer_init=============\n");

timer = kzalloc(sizeof(struct timer), GFP_KERNEL);

if (!timer) {

return -ENOMEM;

}

#ifdef del_work

INIT_DELAYED_WORK(&timer->delaywork, timer_work);

schedule_delayed_work(&timer->delaywork, msecs_to_jiffies(1000));

#endif

#ifdef workqueu

INIT_DELAYED_WORK(&timer->delaywork, timer_work);

timer->monitor_wqueue =

create_singlethread_workqueue("timer_test");

if (!timer->monitor_wqueue) {

return -ESRCH;

}

queue_delayed_work(timer->monitor_wqueue, &timer->delaywork,HZ);

#endif

#ifdef hrtime

INIT_WORK(&timer->workstruct, timer_work);

hrtimer_init(&timer->hrtimer, CLOCK_MONOTONIC, HRTIMER_MODE_REL);

timer->hrtimer.function = hrtimer_test;

hrtimer_start(&timer->hrtimer, ktime_set(1,0), HRTIMER_MODE_REL);

#endif

#ifdef list_timer

setup_timer(&timer->timerlist, timerlist_work, (unsigned long)timer);

mod_timer(&timer->timerlist, jiffies + msecs_to_jiffies(1000));

#endif

return 0;

}

void __exit timer_exit(void)

{

printk("============timer_exit===============\n");

}

module_init(timer_init);

module_exit(timer_exit);

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值