一、 schedule_delay_work 示例:
struct wdt_t {
spinlock_t lock;
void __iomem *base;
struct platform_device *pdev;
struct delayed_work wdt_delayed_work;
struct workqueue_struct wdt_workqueue;
unsigned long timeout;
};
static void wdt_mond(struct work_struct *work)
{
struct wdt_t *wdt = container_of(work, struct wdt_t, wdt_delayed_work.work);
........
schedule_delayed_work(&wdt->wdt_delayed_work, msecs_to_jifies(wdt->timeout*HZ));
}
static int __devinit wdt_probe(struct platform_device *pdev)
{
struct wdt_t *wdt = container_of(pdev, struct wdt_t, pdev);
......
INIT_DELAYED_WORK(&wdt->wdt_delayed_work, wdt_mond);
schedule_delayed_work(&wdt->wdt_delayed_work, 0);
}
二、函数原形与使用顺序
1、定义一个新的数据结构delayed_work用于处理延迟执行:
struct delayed_work {
struct work_struct work;
struct timer_list timer;
};
2、在工作队列中被调用的函数原形如下:
typedef void (*work_func_t)(struct work_struct *work);
3、初始化数据结构
INIT_DELAYED_WORK(struct delayed_work *work, work_func_t func)
4、提交任务到工作队列
int schedule_delayed_work(struct delayed_work *work, unsigned long delay);
5、删除提交到工作队列的任务
int cancel_delayed_work(strcut delayed_work *work);
6、刷新默认工作队列(常跟cancle_delayed_work一起使用)
void flush_schedlue_work(void);