记录下 工作队列的使用
一、使用过程
1.创建工作队列
2.初始化工作,实现工作的回调函数
3.向工作队列提交工作
//1-3 步骤如:初始化函数xxx_init中实现如下函数
xxx_init(){
//初始化
queue = create_singlethread_workqueue("hello");
INIT_WORK(&work, work_handler);
...
//在初始化函数最后将一个任务加入到工作队列中
queue_work(queue, &work);
...
}
回调函数
static void work_handler(struct work_struct *work)
{
//具体的操作
queue_work(queue, &work);
}
二、工作队列
1.创建工作队列
create_singlethread_workqueue(name) // 仅对应一个内核线程
create_workqueue(name) // 对应多个内核线程
2.创建工作
静态地创建工作项(类似宏 直接在函数体外进行声明):
DECLARE_WORK(n, f)
DECLARE_DELAYED_WORK(n, f)
动态地创建工作项(在函数体内使用,如init 函数中):
INIT_WORK(struct work_struct work, work_func_t func);
PREPARE_WORK(struct work_struct work, work_func_t func);
3.向工作队列中提交工作
int queue_work(workqueue_t *queue, work_t *work);
int queue_delayed_work(workqueue_t *queue, work_t *work, unsigned long delay);
4.将工作提交到默认的工作队列中(不用自己创建工作队列,使用系统默认的)
int schedule_work(struct work_struct *work);
int schedule_delayed_work(struct work_struct *work, unsigned long delay);
参考地址:
https://blog.csdn.net/stn_lcd/article/details/78846414