一内核延时函数:
1.短延时:
void ndelay(unsignedlong nsecs);
Void udelay(unsigned long usecs);
Void mdelay(unsigned long msecs);
前面三个函数都属于忙等延时,对于毫秒级以上的延时,内核提供了下面三个函数(可睡眠):
Voidmsleep(unsigned int msecs);
Unsignedlong msleep_interruptble(unsigned int msecs);//可被打断
Voidssleep(unsigned int second);
2.长延时:
最直观的方法就是比较当前jiffies和目标jiffies(设置为当前jiffies加上时间间隔的jiffies)
例:(注:这也是忙等)
Unsigned long delay = jiffies + 100;
While(time_before(jiffies,dealy));//将两个时间进行比较
注:Hz相当于1秒。
内核中还定义了time_after();
#define time_before(a, b) time_after(b, a);
3.睡眠延时:
Schedule_timeout_uninterruptible(jiffies);
Schedule_timeout_interruptible(jiffies);
下面两个函数是将当前进程添加到等待队列中,从而再等待队列上睡眠,当超时发生时,进程将被唤醒:
Sleep_on_timeout(wait_queue_head_t*q, unsigned long timeout);
Interruptible_Sleep_on_timeout(wait_queue_head_t*q, unsigned long timeout);
二.内核定时器
见 书 203页。
转载地址:http://blog.csdn.net/wangyunqian6/article/details/6624117