Android linux 工作佇列
阿新 • • 發佈:2019-01-12
記錄下 工作佇列的使用
一、使用過程
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