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 第二个参数:自己定义的func_callback INIT_DELAYED_WORK(struct delayed_work *work, work_func_t func) 1 2 3 4初始化我们在平台设备的probe下进行初始化:static int My_probe(struct platform_device *dev) { printk("%s\n",__func__); INIT_DELAYED_WORK(&My_...
schedule_delayed_work(&work,delay); 这时,&work指向的work_struct直到delay指定的时钟节拍用完以后才会执行。 可以在中断服务函数中调用schedule_work(&yd_sync_work_queue); 现在工作已经被创建,我们可以调度它了。想要把给定工作的待处理函数提交给缺省的events工作线程,只需调用schedule_work(&work); work马上就...
delayed_work是我们声明的工作队列;通过INIT_WORK对工作队列进行初始化,delayed_work_handler是工作队列的处 理函数,data是传递给处理函数的参数;最后调用schedule_work唤醒工作者线程处理推后执行的工作。如果需要经过一段延迟以后再执行工作, 可以调用: schedule_delayed_work(delayed_work, delay); //delay 是需要延...
delayed_work是在work_struct的基础上加了个timer_list,用于做时间上调度处理。 typedef struct { ... struct delayed_work x_work; //for PPR, HRV ... } ofn_data_t; static ofn_data_t ofndata; 1. 2. 3. 4. 5. 6. 初始化: INIT_DELAYED...
虽然是延后执行,但 work 加入 workqueue 后(以下简称 wq),就被加入 OS 的调度体系,调度到就会执行,这个过程是没有拖延的,as soon as possible。 也可以手动地推迟 work 的执行,比如内存延迟释放的场景:一个 buffer 在准备释放的时候,都将自己加入 destroy 链表,并调用 "schedule_delayed_work"。delay 的时间到...
static void test_delayed_func(struct work_struct *work) { printk("%s, %d, %ld\n", __func__, __LINE__, jiffies); } static int __init test_init(void) { int ret; printk("%s, %d, %ld\n", __func__, __LINE__, jiffies); ...
--> 运行queue:queue_delayed_work(test_workqueue, &test_delayed_work, delay_time); // 定义在:kernel/workqueue.c, 其中delay_time是延迟多少时间来运行queue。 注: 在test_workqueu_func中一定要再次将delayed_workqueue加入queue中,即再次运行queue_delayed_work。否则,此queue只运行一次。
return queue_work(system_wq, work); } 该接口调用了 queue_work,将传入的 work 加入到系统预定义的工作队列system_wq 中,当然,驱动开发人员也可以直接使用 queue_work() 接口,将当前工作队列添加到其他的工作队列。 而schedule_delayed_work 的实现是这样的: ...
--> 初始化workqueue:INIT_DELAYED_WORK(&test_delayed_work, test_workqueue_func); // 定义在:include/linux/workqueue.h --> 创建线程queue并加以名字:test_workqueue = create_singlethread_workqueue("name_of_this_queue"); --> 运行queue:queue_delayed_work(test_workqueue, &test_delayed_work, delay...