延迟工作队列 struct delayed_work

本文深入解析了工作队列的概念及其实现方式,包括一般工作队列、延迟工作队列和静态工作队列的创建与使用。详细介绍了工作队列如何帮助开发者将任务推迟执行,提高代码的灵活性和效率。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

工作队列的作用:工作队列的作用就是把工作推后,交由一个内核线程去执行,更直接的说就是如果写了一个函数,现在不想马上执行它,想在将来某个时刻去执行它,就可以用工作队列.虽然中断也是这样,需要提供一个中断服务函数,在发生中断的时候去执行,但是和中断相比,工作队列最大的好处就是可以调度可以睡眠,灵活性更好。

所以工作队列就是把一些操作放入一个地方,在需要的时候调用。

1、一般的工作队列

struct work_struct *my_work;//声明一个队列
INIT_WORK(my_work, delayed_work_handler, data);//初始化这个队列
schedule_work(my_work);//使用内核工作者线程调用这个队列,实际上是运行与该队列绑定的函数

2、延迟工作队列

//wdt_delayed_work延迟队列结构体
INIT_DELAYED_WORK(&wdt->wdt_delayed_work, wdt_mond);
schedule_delayed_work(&wdt->wdt_delayed_work, 0);

3、静态创建工作队列

DECLARE_WORK(name, void (*func) (void *), void *data);

延迟队列的创建思路:

 1、定义一个新的数据结构delayed_work用于处理延迟执行:

               struct delayed_work {

                        struct work_struct work;

                        struct timer_list timer;

               };
 2、在工作队列中被调用的函数原形如下:

               typedef void (*work_func_t)(struct work_struct *work);
 3、初始化数据结构

               INIT_DELAYED_WORK(struct delayed_work *work, work_func_t func)

 4、提交任务到工作队列

              int schedule_delayed_work(struct delayed_work *work, unsigned long delay);

 5、删除提交到工作队列的任务

              int cancel_delayed_work(strcut delayed_work *work);

 6、刷新默认工作队列(常跟cancle_delayed_work一起使用)

              void flush_schedlue_work(void);

 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值