自2.6.20起,工作队列的数据结构发生了一些变化,使用时不能沿用旧的方法。
1、在工作队列中被调用的函数原形如下:
typedef void (*work_func_t)(struct work_struct *work);
2、定义了一个新的结构delayed_work用于处理延迟执行:
struct delayed_work {
struct work_struct work;
struct timer_list timer;
};
该结构用于schedule_delayed_work和queue_delayed_work()。
3、下面把2.6.20以后的API罗列一下:
1) INIT_WORK(struct work_struct *work, work_func_t func)
2) INIT_DELAYED_WORK(struct delayed_work *work, work_func_t func)
3) int schedule_work(struct work_struct *work)
4) int schedule_delayed_work(struct delayed_work *work, unsigned long delay)
5) struct workqueue_struct *create_workqueue(const char *name)
6) struct workqueue_struct *create_singlethread_workqueue(const char *name)
7) int queue_work(struct workqueue_struct *wq, struct work_struct *work)
8) int queue_delayed_work(struct workqueue_struct *wq, struct delayed_work *work, unsigned long delay)
9) void flush_scheduled_work(void)
10) void flush_workqueue(struct workqueue_struct *wq)
11) int cancel_delayed_work(struct delayed_work *work)
12) void destroy_workqueue(struct workqueue_struct *wq)
其中,1), 2), 4) ,8)和以前略有区别,其他用法完全一样。