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