要安排稍后在 linux 内核驱动程序中发生的操作,我有 2 个选项:
add_timer
queue_delayed_work
我知道的一个区别:对于计时器,您需要指定expires
计时器到期时的 jiffies 值,对于延迟工作,您需要指定 jiffies 的延迟。
我一直在阅读有关计时器和 work_queue 的其他问题,其中提到计时器在进程上下文之外运行。这与延迟工作有什么不同?
另外我知道定时器有问题,在计算时expires
,可能会发生值溢出,所以计算的值小于当前的 jiffies 并且定时器立即过期(如果我错了,请纠正我)。延迟工作是否会遇到同样的问题?如果有,怎么做
对我来说,使用延迟工作似乎更容易(因为工作不是周期性的)。但是使用定时器有什么缺点呢?
编辑
我做了一些进一步的研究。它似乎queue_delayed_work
只是在add_timer
内部使用。
所以我的新问题是,如何正确处理计时器的 jiffies 溢出?例如,如何将 timer/delayed_work 设置为 10 分钟延迟?