长延时(多于一个时钟嘀哒)
1.忙等待
while (time_before(jiffies, j1))
cpu_relax();
2.让出处理器
while (time_before(jiffies, j1)) {
schedule();
}
3.超时
wait_queue_head_t wait;
init_waitqueue_head (&wait);
long wait_event_interruptible_timeout(wait_queue_head_t q, condition, long timeout);
long wait_event_timeout(wait_queue_head_t q, condition, long timeout);
或者用(避免声明和使用一个多余的等待队列头)
set_current_state(TASK_INTERRUPTIBLE);
schedule_timeout (delay);
短延时(硬件的反应时间, 涉及到的延时常常是最多几个毫秒)
一、
1.每个体系都实现 udelay,其他的函数可能或者不可能定义; 如果它们没有定义, 提供一个缺省的基于 udelay 的版本,
2.这3个函数都是忙等待; 其他任务在时间流失时不能运行
#include <linux/delay.h> void ndelay(unsigned long nsecs); void udelay(unsigned long usecs); void mdelay(unsigned long msecs);
|
二、获得毫秒(和更长)延时而不用涉及到忙等待
<linux/delay.h> void msleep(unsigned int millisecs); unsigned long msleep_interruptible(unsigned int millisecs); void ssleep(unsigned int seconds)
|
msleep 的调用是不可中断的,能确保进程睡眠至少给定的毫秒数
msleep_interruptible可中断,可用队列来唤醒。正常返回为0,唤醒则为剩余的毫秒数
ssleep不可中断
阅读(1385) | 评论(0) | 转发(0) |