----------------------------------------------------------------------------------------------------------------------------------------
进程专有工作队列
1.创建工作队列
struct workqueue_struct *create_workqueue(const char *name); //在这里 name 是工作队列的名字
2.工作队列任务可以在编译时或者运行时创建
(1)编译期初始化一个工作队列任务时要用到
DECLARE_WORK(name, void (*function)(void *), void *data);
(2)在运行期初始化一个工作队列时要用到
INIT_WORK(struct work_struct *work, void (*function)(void *), void *data);
3.调用来把任务(work_struct)加入到工作队列中
int queue_work(struct workqueue_struct *queue, struct work_struct *work);
int queue_delayed_work(struct workqueue_struct *queue, struct work_struct *work, unsigned long delay);
//delay是为了保证至少在经过一段给定的最小延迟时间以后,工作队列中的任务才可以真正执行
-----------------------------------------------------------------------------------------------------------------------------------------
像内核缺省工作队列中加入任务
int schedule_work(struct work_struct *work);
int schedule_delayed_work(struct work_struct *work, unsigned long delay);
-----------------------------------------------------------------------------------------------------------------------------------------
1.任何一个在工作队列中等待了无限长的时间也没有运行的任务可以用下面的方法取消:
int cancel_delayed_work(struct work_struct *work);
2.清空工作队列中的所有任务使用:
void flush_workqueue(struct workqueue_struct *queue);
3.销毁工作队列使用:
void destroy_workqueue(struct workqueue_struct *queue);