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 );

/*返回值为真表示正在运行,假表示停止*/

总结:



  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值