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