Linux内核中断底半部处理--工作队列

工作队列的使用过程:

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内核中断底半部处理--工作队列