1/**2* schedule_delayed_work - put work task in global workqueue after delay3* @dwork: job to be done4* @delay: number of jiffies to wait or 0 for immediate execution5*6* After waiting for a given time this puts a job in the kernel-global7* workqueue.8*/9staticinlineboolschedule_...
delayed_work是我们声明的工作队列;通过INIT_WORK对工作队列进行初始化,delayed_work_handler是工作队列的处 理函数,data是传递给处理函数的参数;最后调用schedule_work唤醒工作者线程处理推后执行的工作。如果需要经过一段延迟以后再执行工作, 可以调用: schedule_delayed_work(delayed_work, delay); //delay 是需要延...
intschedule_work(structwork_struct*work); schedule_work将work放入内核全局workqueue中:如果当前work不在workqueue中,则将其加入workqueue;否则保持其在内核全局workqueue中的相同位置。 2.2.2 scheduled_delayed_work intscheduled_delayed_work(structdelayed_work*dwork,unsignedlongdelay); 相比于schedule_work,函数sched...
schedule_delayed_work(&work,delay); 这时,&work指向的work_struct直到delay指定的时钟节拍用完以后才会执行。 可以在中断服务函数中调用schedule_work(&yd_sync_work_queue); 现在工作已经被创建,我们可以调度它了。想要把给定工作的待处理函数提交给缺省的events工作线程,只需调用schedule_work(&work); work马上就...
了解了 workqueue 的初始化以及实现原理,再来看schedule_work的实现原理,事情就会变得轻松很多,经过前面章节的铺垫,不难猜到:不管是 schedule_work 还是 schedule_delayed_work,都是将 work 添加到 worker_pool->worklist 中,然后由 worker 对应的内核线程执行,但是还有两个问题需要给出答案: ...
schedule_delayed_work(&ofndata.x_work, msecs_to_jiffies(20)); 1. 首次调用之后,该函数开始循环间隔40ms时间执行,即自己调用自己: static void ofn_x_work_func(struct work_struct *work) { ofn_ppg(); schedule_delayed_work(&ofndata.x_work, msecs_to_jiffies(40)); ...
ret = schedule_delayed_work(&test_delayed_work, 5 * HZ); printk("%s, %d, %ld\n", __func__, __LINE__, jiffies); return 0; } static void __exit test_exit(void) { printk("%s, %d, %ld\n", __func__, __LINE__, jiffies); ...
591staticinline bool schedule_delayed_work(struct delayed_work *dwork,unsigned long delay)//注销一个延迟执行 2975 bool cancel_delayed_work(struct delayed_work *dwork) 和内核定时器一样,延迟执行只会在超时的时候执行一次,如果要实现循环延迟,只需要在注册的函数中再次注册一个延迟执行函数。
schedule_delayed_work(&jiq_work, data->delay); else } schedule_work(&jiq_work); 如果用户在读被延后的设备 (/proc/jiqwqdelay), 这个工作函数重新提交它自己在延后的模式, 使用 schedule_delayed_work: int schedule_delayed_work(struct work_struct *work, unsigned long delay);如果你看从这 2 个设...
int schedule_work(struct work_struct *work); 返回1成功, 0已经添加在队列上 延迟调度: int schedule_delayed_work(struct work_struct *work, unsigned long delay); === 创建新队列和新工作者线程: struct workqueue_struct *create_workqueue(const char *name)...