Linux内核中断底半部处理--工作队列
工作隊列的使用過程:
工作隊列相關函數介紹:
#include <workqueue.h> /*頭文件包含*/
1.工作隊列的創建及銷毀:
定義一個工作隊列結構體指針
static struct workqueue_struct *key_workqueue;
創建工作隊列
struct workqueue_struct *create_workqueue(char *);
參數:工作隊列的名稱(字符串)
返回值:創建好的工作隊列
銷毀工作隊列,參數為待銷毀的工作隊列
void destroy_workqueue(struct workqueue_struct *);
2.工作的創建、初始化
創建一個不帶延時的工作(加入隊列立即執行)
struct work_struct work;
工作初始化宏
INIT_WORK(&work, func);
參數1:用戶已定義的work_struct變量(工作)
參數2:任務處理函數,用戶實現(中斷底半部)
3.添加工作到工作隊列
int queue_work(struct workqueue_struct*wq,struct work_struct *work);
參數1:第1部創建的工作隊列
參數2:第2部創建的工作
4.延遲工作的創建、初始化及添加:
定義一個帶延時的工作
struct delayed_work dwork;
初始化帶延遲的工作
INIT_DELAYED_WORK(&dwork, func);
添加帶延遲的工作到工作隊列
int queue_delayed_work(struct workqueue_struct *wq,
struct delayed_work *dwork, unsigned long delay);
參數delay:延遲時間(時鐘滴答數)
【注】對于我們的開發板,一個時鐘滴答=5ms
終止隊列中的工作(即使處理程序已經在處理該任務)
int cancel_work_sync(struct work_struct *work);
int cancel_delayed_work_sync(struct?delayed_work *dwork);
判斷任務項目是否在進行中
int work_pending(struct work_struct work );
int delayed_work_pending(structdelayed_work work );
/*返回值為真表示正在運行,假表示停止*/
總結:
總結
以上是生活随笔為你收集整理的Linux内核中断底半部处理--工作队列的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Linux内核中工作队列的使用work_
- 下一篇: linux下安装或升级GCC 4.8以上