Android linux 工作队列

记录下 工作队列的使用

一、使用过程

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

猜你喜欢

转载自blog.csdn.net/shiluohuashengmi/article/details/81146488