延时工作队列INIT_DELAYED_WORK
来源:互联网 发布:缺省域名怎么填 编辑:程序博客网 时间:2024/06/11 01:05
如何使用queue_delayed_work函数
#include <linux/module.h>
#include <linux/proc_fs.h>
#include <linux/workqueue.h>
#include <linux/sched.h>
#include <linux/init.h>
#include <linux/interrupt.h>
#include <linux/delay.h>
struct workqueue_struct *test_wq;
struct delayed_work test_dwq;
void delay_func(struct work_struct *work);
void delay_func(struct work_struct *work)
{
int i;
printk(KERN_INFO "My name is delay_func!\n");
for (i = 0; i < 3; i++) {
printk(KERN_ERR "delay_fun:i=%d\n", i);
msleep(1000);
}
}
static int __init example_init(void)
{
int i;
int ret;
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);
ret = queue_delayed_work(test_wq, &test_dwq, 5000);
printk(KERN_INFO "first ret=%d!\n", ret);
for (i = 0; i < 3; i++) {
printk(KERN_INFO "Example:ret= %d,i=%d\n", ret, i);
msleep(100);
}
ret = queue_delayed_work(test_wq, &test_dwq, 0);
printk(KERN_INFO "second ret=%d!\n", ret);
return 0;
}
static void __exit example_exit(void)
{
int ret;
ret = cancel_delayed_work(&test_dwq);
flush_workqueue(test_wq);
destroy_workqueue(test_wq);
printk(KERN_INFO "Goodbay! ret=%d\n", ret);
}
module_init(example_init);
module_exit(example_exit);
MODULE_LICENSE("GPL");
运行结果:
kernel: Create Workqueue successful!
kernel: first ret=1!
kernel: Example:ret= 1,i=0
kernel: Example:ret= 1,i=1
kernel: Example:ret= 1,i=2
kernel: second ret=0!
kernel: Goodbay! ret=1
kernel: Create Workqueue successful!
kernel: Create Workqueue successful!
kernel: first ret=1!
kernel: Example:ret= 1,i=0
kernel: Example:ret= 1,i=1
kernel: Example:ret= 1,i=2
kernel: second ret=0!
kernel: Goodbay! ret=1
kernel: Create Workqueue successful!
说明将任务添加到工作队列后,如果工作队列还在执行该任务,则queue_delayed_work()返回1,否则返回0,如上实例所述;
主线程delay_wq将任务添加到工作队列后,使得工作队列在延迟delay后执行函数delay_func(),而delay_wq线程继续执行;
0 0
- 延时工作队列INIT_DELAYED_WORK
- linux 延时工作队列
- 内核线程,tasklet异步通知,工作队列,内核延时
- Linux设备驱动第六天(工作队列、定时器、延时)
- live555延时队列
- RabbitMQ 实现延时队列
- java延时队列使用
- JAVA 延时队列
- laravel 5.2队列延时
- 单机版延时队列
- rabbitmq--延时队列
- 简析LIVE555中的延时队列
- 简析LIVE555中的延时队列 .
- DelayQueue延时队列的使用
- RabbitMQ学习之延时队列
- 用mongodb构建延时队列
- iOS——队列延时
- RabbitMQ学习之延时队列
- UEFI Drivers & UEFI Driver Model
- 不翻墙一样更新Android SDK(转,已亲身测试确认)
- UEFI HOB
- 页面自动刷新
- QT编程,如何使对话框总是最优化
- 延时工作队列INIT_DELAYED_WORK
- 前端开发相关---个人收藏网址地址大全
- MFC的多国语言界面的实现
- 新建一个对象,java虚拟机的各个执行操作
- 三个等号===和两个等号==的区别
- 【算法设计与分析基础】背包问题
- GRE写作必备句型
- html文档模式
- 排序-----冒泡排序