•驅動(dòng)為需要延遲處理的工作建立一work_struct 結構, 該結構即為工作單元, 它還包含一函數指針用來(lái)處理具體的延遲工作;
•該工作單元被添加到當前CPU 的默認工作線(xiàn)程或自定義工作線(xiàn)程的工作隊列中等待處理
• 在某一時(shí)刻, 工作線(xiàn)程被喚醒, 它將循環(huán)處理工作隊列中的每一個(gè)工作單元。
使用系統中的默認工作隊列
•首先, 要為需要延遲處理的工作單元建立一個(gè)work_struct 結構
–內核提供了下面2 個(gè)宏來(lái)方便地建立該結構:
•DECLARE_WORK(name, void (*func)(void *), void *data); //靜態(tài)創(chuàng )建
•INIT_WORK (struct work_struct *work, void (*func)(void *),void *data) //動(dòng)態(tài)初始化
•將該結構放入到默認工作線(xiàn)程的工作隊列中去, 內核提供以下2 個(gè)宏操作:
–schedule_work(work);
–schedule_delayed_work(work, delay)。
–這2 個(gè)宏操作的主要區別就在于一個(gè)是立即被調度, 一個(gè)是延遲delay 個(gè)時(shí)鐘周期后被調度。
使用自定義工作隊列
•創(chuàng )建工作線(xiàn)程使用
struct workqueue_struct *create_workqueue (const char *name)。
–其中, name 為該類(lèi)型工作工作線(xiàn)程的名字
•創(chuàng )建類(lèi)型為myworker的工作線(xiàn)程的代碼如下:
struct workqueue_struct *myworker;
myworker = create_workqueue( “myworker”)。
•將work_struct 加入到自定義工作線(xiàn)程的工作隊列中可以采用以下接口:
–int queue_work(struct workqueue_struct *wq, struct work_struct *work);
–int queue_delayed_work (struct workqueue_struct *wq,struct work_struct *work,unsigned long delay)。
本站僅提供存儲服務(wù),所有內容均由用戶(hù)發(fā)布,如發(fā)現有害或侵權內容,請
點(diǎn)擊舉報。