当前位置: 首页 > news >正文

Linux中工作队列使用

一. 背景:
内核版本2.5开发期间,设计了工作队列,用于解决:
Linux系统中延时一段时间执行一个任务、自定义函数。

二. API接口:
#include<linux/workqueue.h>                     //头文件
static struct workqueue_struct *test_wq;    //声明一个工作队列
static struct delayed_work test_dwq;          //声明一个延时工作描述实例
void delay_func(struct work_struct *work); //声明、实现一个工作队列延时处理函数

test_wq = create_workqueue("test_wq");    //初始化一个工作队列, init模块或probe函数添加
INIT_DELAYED_WORK(&test_dwq, delay_func);//延时工作任务初始化, init模块或probe函数添加

//参数1:工作队列,参数2:工作队列处理函数,参数3:延时时间
queue_delayed_work(test_wq, &test_dwq,delay); //初始化时向工作队列提交工作任务

cancel_delayed_work(test_wq);        //取消工作对列中工作任务, exit函数添加
flush_workqueue(test_wq);                //刷新工作对列, exit函数添加
destory_workqueue(test_wq);            //工作队列销毁, exit函数添加

三.代码
#include <linux/workqueue.h>
static struct workqueue_struct *test_wq;
static struct delayed_work test_dwq;
static void delay_func(struct work_struct *work);

static void delay_func(struct work_struct *work){
printk(KERN_INFO "My name isdelay_func!\n);   

    //msecs_to_jiffies(5000)中5000即5000ms
//加上这句可以每隔5秒执行1次delay_func,若不添加执行1次   
queue_delayed_work(test_wq, &test_dwq,  msecs_to_jiffies(5000)); 
}

static int __init module_init(void){
test_wq = create_workqueue("test_wq");
if (!test_wq) {
printk(KERN_ERR "No memory for workqueue\n");
return 1;   
}
printk(KERN_INFO "Create Workqueue successful!\n");

INIT_DELAYED_WORK(&test_dwq, delay_func); //在此找到延时工作任务:delay_func
queue_delayed_work(test_wq, &test_dwq,delay);

return 0;

}

static void __exit module_exit(void){    
destory_workqueue(test_wq);    
printk(KERN_INFO "Goodbay!\n");
}

引用:

https://www.cnblogs.com/youngerchina/archive/2011/12/23/5624642.html
https://blog.csdn.net/qq_30624591/article/details/90180946

http://www.dtcms.com/a/498975.html

相关文章:

  • 金融工程(一)
  • LeetCode 每日一题 2025/10/13-2025/10/19
  • C++ 面试基础考点 模拟题 力扣 38. 外观数列 题解 每日一题
  • 辽阳企业网站建设费用企业推广软文
  • 天津实体店网站建设深圳宝安区住建局官网
  • shell编程语言---sed
  • iframe实战:跨域通信与安全隔离
  • 购物网站的建设意义html可视化编辑软件
  • Bootstrap 字体图标
  • PVE 9.0 定制 Debian 13 镜像 支持 Cloud-Init 快速部署虚拟机【模板篇】
  • 长春建站模板搭建高端品牌包包都有哪些
  • ai周公解梦抖音快手微信小程序看广告流量主开源
  • 【无标题】大模型-高效优化技术全景解析:微调 量化 剪枝 梯度裁剪与蒸馏 下
  • 自动化信息交付:深度解析AI驱动的每日简报系统架构与实现
  • 做微信公众号第三网站男女做视频观看网站
  • 定时任务Quartz原理详解
  • Rethinking SSIM-Based Optimization in Neural Field Training
  • rocketmq和kafka的区别之顺序消费
  • 套路有*道龙激光-乐多刀销*游戏程序系统方案
  • Angular 2 数据显示
  • 如何快速做单页面网站怎么查网站建设是哪家公司
  • 外国网站备案网站板块设置
  • 从 ClickHouse 到 StarRocks 存算分离: 携程 UBT 架构升级实践
  • 云手机 三角洲行动跑刀
  • Java 反射机制深度解析:从对象创建到私有成员操作
  • c++|表达最值的更好方法|clamp
  • Altium Designer(AD24)File文件功能总结
  • 【EE初阶 - 网络原理】应用层协议(下)
  • Pyinstaller - Python桌面应用打包的首选工具
  • PHP编程语言选择