文档介绍:关于各种延时在Linux中,如果是应用层下的一些应用,我们可以:1)调用unsignedintsleep(unsignedintsecond);函数去定时,这个时候它是秒级的;头文件为<>;2)调用intusleep(useconds_t);函数去定时,这个时候它是微秒级的;头文件为<>;3)调用高精度睡眠intnanosleep(conststructtimespec*rep,structtimespec*rem);是一个相比标准UNIX的sleep调用具有更高高精度的版本。和普通的sleep调用计算整秒数不同,nanosleep接受一个指向一个structtimespec对象的指针作为参数,它可以表示毫微秒(nanosecond,十亿分之一秒)的时间。然而,了解Linux内核的工作细节后可知,nanosleep所提供的真正精确度是10毫秒——比sleep提供的要精确。这个附加的精确度非常有用,比如说,可以根为反复进行的任务设置更短的间隔。structtimespec由两部分构成:tv_sec表示整秒数部分;tv_nsec则表示毫微秒。tv_nesc的值必须小于109。nanosleep相比sleep具有另一个优点。与sleep相同,nanosleep调用可以被信号中断,这是errno将被设置为EINTR而调用将返回-1。但是,nanosleep的第二个参数,另一个指向structtimespec对象的指针,如果不为NULL则在这种情况下它将被写入剩余的时间(这就是所请求的睡眠时间和实际睡眠时间的差)。这使重新开始睡眠变的很容易。头文件<>。以下是内核中的:();mdelay();ndelay();实现的原理本质上都是忙等待,ndelay和mdelay都是通过udelay衍生出来的,我们使用这些函数的实现往往会碰到编译器的警告implicitdeclarationoffunction'udelay',这往往是由于头文件的使用不当造成的。在include/asm-???/(),而在include/linux/,如果你填的数大于2000,系统会认为你这个是一个错误的delay函数,因此如果需要2ms以上的delay需要使用mdelay函数。,对于长时间的忙等待意味这无谓的耗费着cpu的资源,因此对于毫秒级的延时,内核提供了msleep,ssleep等函数,这些函数将使得调用它的进程睡眠参数指定的时间。那么,在Windows中呢:1)我们很快想到Sleep();头文件<>然后再VC++中,找到了一篇不错的文章,转自这里,内容如下:方法一:VC中的WM_TIMER消息映射能进行简单的时间控制。首先调用函数SetTimer()设置定时间隔,如SetTimer(0,200,NULL)即为设置200ms的时间间隔。然后在应用程序中增加定时响应函数OnTimer(),并在该函数中添加响应的处理语句,用来完成到达定时时间的操作。这种定时方法非常简单,可以实现一定的定时功能,但其定时功能如同Sleep()函数的延时功能一样,精度非常低,最小计时精度仅为30ms,CPU占用低,且定时器消息在多任务操作系统中的优先级很低,不能得到及时响应,往往不能满足实时控制环境下的应用。只可以用来实现诸如位图的动态显示等对定时精度要求不高的情况。如示例工程中的Timer1。方法二:VC中使用sleep()函数实现延时,它的单位是ms,如延时2秒,用sleep(2000)。精度非常低,最小计时精度仅为30ms,用sleep函数的不利处在于延时期间不能处理其他的消息,如果时间太长,就好象死机一样,CPU占用率非常高,只能用于要求不高的延时程序中。如示例工程中的Timer2。方法三:利用COleDateTime类和COleDateTimeSpan类结合WINDOWS的消息处理过程来实现秒级延时。如示例工程中的Timer3和Timer3_1。以下是实现2秒的延时代码:COleDateTimestart_time=COleDateTime::GetCurrentTime();COleDateTimeSpanend_time=COleDateTime::GetCurrentTime()-start_time;while(()<2)//实现延时2秒{MSGmsg;GetMessage(&msg,NULL,0,0);TranslateMessage(&msg);DispatchMessa