从Linux应用层和内核两方面来分辨下延后函数:
1.应用层
1>
sleepusleep
毫秒级
头文件为;
3>nanosleep
相比标准UNIX的sleep调用具有更高高精度的版本。和普通的sleep调用估算整秒数不同qq for linux,nanosleep接受一个指向一个structtimespec对象的表针作为参数,它可以表示毫微秒(nanosecond,十亿分之1秒)的时间。但是,了解Linux内核的工作细节后可知,nanosleep所提供的真正精确度是10微秒——比sleep提供的要精确。这个附加的精确度十分有用,例如说,可以根为反复进行的任务设置更短的间隔。struct
timespec由两部份构成:tv_sec表示整秒数部份;tv_nsec则表示毫微秒。tv_nesc的值必须大于109。
nanosleep相比sleep具有另一个优点。与sleep相同,nanosleep调用可以被讯号中断,这是errno
将被设置为EINTR而调用将返回-1。并且,nanosleep的第二个参数,另一个指向structtimespec对象的表针,假若不为NULL则在这些情况下它将被写入剩余的时间(这就是所恳求的睡眠时间和实际睡眠时间的差)。这使重新开始睡眠变的很容易。
头文件。
2.内核
1>udelaymdelayndelay
实现的原理本质上都是忙等待,ndelay和mdelay都是通过udelay衍生下来的.
因为这种delay函数本质上都是忙等待,对于长时间的忙等待意味这无谓的花费着cpu的资源.
udelay通常适用于一个比较小的delaylinux操作系统好吗,假如你填的数小于2000,系统会觉得你这个是一个错误的delay函数,因而假如须要2ms以上的delay须要使用mdelay函数。
2>msleep,ssleep
微秒级的延时linux内核延时函数,这种函数将促使调用它的进程睡眠参数指定的时间。
其实linux内核延时函数,*sleep是可以进行系统调度,耗损资源小,*delay下是不能进行系统调度,十分花费资源。