我有一个工作队伍的作品,在他的函数中有一个msleep()。是否有一些功能来唤醒工作或删除它而不等待它完成睡眠?或者也许在工作中有相同的延迟功能可以中断?非常感谢。
答案 0 :(得分:1)
如果当前正在执行工作,则无法在未完成的情况下停止工作。
通常,msleep()
可以用wake_up_process(task)
中断,但是从外部你不知道执行工作队列的过程(任务)。
如果你想让你的工作暂停在外面可以中断,你应该使用wake_up-aware功能。例如,wait_for_completion_timeout
:
DECLARE_COMPLETION(comp);
void work_func(struct work* work)
{
...
// sleep for *m* miliseconds
if(wait_for_completion_timeout(&comp, msecs_to_jiffies(m)))
{
// sleep has been interrupted
}
...
}
some_func()
{
...
// No futher needs to work
complete(&comp);
}
注意,*_timeout
函数使用 jiffies 来计算间隔。