1. 程式人生 > >Android linux 工作佇列

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