工作队列使用方法(2.6.20之后)
2013-06-28 14:58
260 查看
工作队列在2.6.20之后
entry和之前的版本相同,func和data发生了变化,另外并无其他的变量。
entry我们不去过问,
data是之前版本的pending和wq_data的复合体,起到了以前的pending和wq_data的作用。
func的参数是一个work_struct指针,指向的数据就是定义func的work_struct。
2.6.20版本之后使用工作队列需要把work_struct定义在用户的数据结构中,然后通过container_of来得到用户数据。具体用法可以参考稍后的例子。
delayed_work用于处理延迟执行:
树觉结构如下:
例子如下:
entry和之前的版本相同,func和data发生了变化,另外并无其他的变量。
entry我们不去过问,
data是之前版本的pending和wq_data的复合体,起到了以前的pending和wq_data的作用。
func的参数是一个work_struct指针,指向的数据就是定义func的work_struct。
2.6.20版本之后使用工作队列需要把work_struct定义在用户的数据结构中,然后通过container_of来得到用户数据。具体用法可以参考稍后的例子。
delayed_work用于处理延迟执行:
树觉结构如下:
typedef void (*work_func_t)(struct work_struct *work); struct work_struct { atomic_long_t data; struct list_head entry; work_func_t func; };用到得函数增加如下:
INIT_WORK(struct work_struct *work, work_func_t func); INIT_DELAYED_WORK(struct delayed_work *work, work_func_t func); int schedule_work(struct work_struct *work); int schedule_delayed_work(struct delayed_work *work, unsigned long delay); struct workqueue_struct *create_workqueue(const char *name); int queue_work(struct workqueue_struct *wq, struct work_struct *work); int queue_delayed_work(struct workqueue_struct *wq, struct delayed_work *work, unsigned long delay); void flush_scheduled_work(void); void flush_workqueue(struct workqueue_struct *wq); int cancel_delayed_work(struct delayed_work *work); void destroy_workqueue(struct workqueue_struct *wq);其中得
queue_delayed_work可以用来做延时处理具体如下:
struct delayed_work { struct work_struct work; struct timer_list timer; };
例子如下:
struct my_struct_t { char *name; struct work_struct my_work; }; void my_func(struct work_struct *work) { struct my_struct_t *my_name = container_of(work, struct my_struct_t, my_work); printk(KERN_INFO “ my name is %s!\n”, my_name->name); } struct workqueue_struct *my_wq = create_workqueue(“my wq”); struct my_struct_t my_name; my_name.name = “Lion”; INIT_WORK(&(my_name.my_work), my_func); queue_work(my_wq, &(my_name.my_work)); destroy_workqueue(my_wq);
相关文章推荐
- 工作队列使用方法(2.6.20)
- 在更新 Mac OS X EI Capitain之后Xcode7使用CocoaPods不工作的解决方法
- 工作队列使用方法
- 内核的 工作队列 使用方法,struct work_struct
- 内核的 工作队列 使用方法,struct work_struct
- linux内核工作队列的使用方法
- 内核工作队列使用方法
- ogre1.7的工作队列的使用方法
- 内核的 工作队列 使用方法,struct work_struct
- Git使用方法总结,工作之后才逐渐熟悉理解这些git语句
- 内核的 工作队列 使用方法,struct work_struct
- 内核的 工作队列 使用方法,struct work_struct
- 异步任务队列Celery在Django中的使用方法
- 工作笔记本的挑选方法与使用方法(笔记)
- 使用代理软件之后其他软件不能联网的解决方法
- Spark PG3. RDD 操作一 基础 ,放入方法,闭包,输出元素, 使用 Key-Value 工作
- 网站安全配置(Nginx)防止网站被攻击(包括使用了CDN加速之后的配置方法)
- python使用rabbitmq实例二,工作队列
- 再谈STM32的CAN过滤器-bxCAN的过滤器的4种工作模式以及使用方法总结
- C++优先队列的基本使用方法