1

如标题所示:如何调用 sleep()?

4

2 回答 2

2

您可以使用 get_random_bytes(),对 sleep() 的类似调用也存在,例如 msleep()、usleep() 等,具体取决于您想要做什么。注意 *sleep() 不能在原子上下文中使用,您需要使用 *delay()。通常,在内核中使用 sleep()/delay() 调用之前,您需要三思而后行。

如果您正在编写设备驱动程序并且您希望确保设备已完成任何操作(假设您不能为此使用中断并且您需要轮询一些寄存器左右),那么请考虑使用 msleep(10) 而不是使用 msleep(2) 或类似方法进行 5 次循环,轮询寄存器并尽早中断。您等待的时间至少是您请求的时间,并且取决于系统负载。

于 2012-09-19T16:32:48.287 回答
0

dmp 是对的。牢记以上所有要点,您还可以尝试使用这个简单的宏来模拟 sleep(3) 内核调用:

#ifdef __KERNEL__
/*------------ DELAY_SEC -------------------------*
 * Delays execution for n seconds.
 * MUST be called from process context.
 *------------------------------------------------*/
#define DELAY_SEC(val) \
{ \
    if (!in_interrupt()) {  \
        set_current_state (TASK_INTERRUPTIBLE); \
        schedule_timeout (val * HZ); \
    }   \
}
#endif
于 2012-09-21T03:54:29.423 回答