admin管理员组

文章数量:1130349

schedule_delayed_work 是 Linux 内核中用于延迟执行工作的函数。它的主要作用是将一个任务(work)安排在指定的延迟时间后在内核全局工作队列中执行[1][2].

函数原型如下:

static inline bool schedule_delayed_work(struct delayed_work *dwork,
                                         unsigned long delay)

其中:

  • dwork: 要执行的延迟工作(delayed work)
  • delay: 延迟时间,单位为 jiffies[1][2]

使用方法:

  1. 通常将毫秒转换为 jiffies:

    schedule_delayed_work(&work, msecs_to_jiffies(poll_interval));
    
  2. 当指定的延迟时间到达时,delayed_work 结构体中的 work 成员的 func() 函数会被执行[1].

  3. 对于周期性任务,可以在工作函数中再次调用 schedule_delayed_work() 来实现循环执行[1][2].

schedule_delayed_work() 实际上是对 queue_delayed_work() 的封装,它使用系统全局工作队列 system_wq[3]:

return queue_delayed_work(system_wq, dwork, delay);

如果需要取消已经安排的延迟工作,可以使用以下函数:

  • cancel_delayed_work(): 尝试取消延迟工作,但不等待正在执行的工作完成[2].
  • cancel_delayed_work_sync(): 取消延迟工作并等待它完成执行[1][2].

使用 schedule_delayed_work() 的优势在于它将工作交给内核线程执行,避免在中断上下文中执行耗时操作,提高了系统的响应性和可靠性[7][8].

Citations:
[1] https://blog.csdn/yueni_zhao/article/details/127550651
[2] https://wwwblogs/zhiminyu/p/17628497.html
[3] https://github/apachecn/apachecn-linux-zh/blob/master/docs/linux-device-driver-dev/03.md
[4] https://wwwblogs/yanghong-hnu/p/4671350.html
[5] https://blog.csdn/xiaowen_10/article/details/7997017
[6] http://www.360doc/content/14/0221/21/5073814_354607390.shtml
[7] https://jasonblog.github.io/note/linux_kernel/ff08_wu_ff09_ff1a_xia_ban_bu_ji_zhi_zhi_gong_zuo_d.html
[8] https://juejin/post/6844903649756315655

schedule_delayed_work 是 Linux 内核中用于延迟执行工作的函数。它的主要作用是将一个任务(work)安排在指定的延迟时间后在内核全局工作队列中执行[1][2].

函数原型如下:

static inline bool schedule_delayed_work(struct delayed_work *dwork,
                                         unsigned long delay)

其中:

  • dwork: 要执行的延迟工作(delayed work)
  • delay: 延迟时间,单位为 jiffies[1][2]

使用方法:

  1. 通常将毫秒转换为 jiffies:

    schedule_delayed_work(&work, msecs_to_jiffies(poll_interval));
    
  2. 当指定的延迟时间到达时,delayed_work 结构体中的 work 成员的 func() 函数会被执行[1].

  3. 对于周期性任务,可以在工作函数中再次调用 schedule_delayed_work() 来实现循环执行[1][2].

schedule_delayed_work() 实际上是对 queue_delayed_work() 的封装,它使用系统全局工作队列 system_wq[3]:

return queue_delayed_work(system_wq, dwork, delay);

如果需要取消已经安排的延迟工作,可以使用以下函数:

  • cancel_delayed_work(): 尝试取消延迟工作,但不等待正在执行的工作完成[2].
  • cancel_delayed_work_sync(): 取消延迟工作并等待它完成执行[1][2].

使用 schedule_delayed_work() 的优势在于它将工作交给内核线程执行,避免在中断上下文中执行耗时操作,提高了系统的响应性和可靠性[7][8].

Citations:
[1] https://blog.csdn/yueni_zhao/article/details/127550651
[2] https://wwwblogs/zhiminyu/p/17628497.html
[3] https://github/apachecn/apachecn-linux-zh/blob/master/docs/linux-device-driver-dev/03.md
[4] https://wwwblogs/yanghong-hnu/p/4671350.html
[5] https://blog.csdn/xiaowen_10/article/details/7997017
[6] http://www.360doc/content/14/0221/21/5073814_354607390.shtml
[7] https://jasonblog.github.io/note/linux_kernel/ff08_wu_ff09_ff1a_xia_ban_bu_ji_zhi_zhi_gong_zuo_d.html
[8] https://juejin/post/6844903649756315655

本文标签: 简介scheduledelayedwork