一、windows sleep函数
在Windows操作系统中,Sleep()函数是一个用于暂停程序执行一段时间的函数。它的作用是将当前线程阻塞一段指定的时间,以便让其他线程有机会执行。
Sleep()函数的原型如下:
VOIDWINAPISleep(DWORDdwMilliseconds);
其中,dwMilliseconds参数指定了要暂停的时间(以毫秒为单位)。函数会将当前线程阻塞,直到指定的时间过去。
需要注意的是,Sleep()函数会将整个线程阻塞,因此在使用时需要谨慎。如果需要在程序中暂停一段时间,可以考虑使用其他方法,例如使用定时器或者等待事件等。
二、sleep命令使用教程
使用权限:所有使用者
使用方式:sleep[--help][--version]number[**hd]
说明:sleep可以用来将目前动作延迟一段时间
参数说明:
--help:显示辅助讯息
--version:显示版本编号
number:时间长度,后面可接s、m、h或d
其中s为秒,m为分钟,h为小时,d为日数
例子:
显示目前时间后延迟1分钟,之后再次显示时间:
date;sleep1m;date
这个命令更多应用于shell脚本编程里和程序里
如下面的一段程序:
应用程序:
#include<syswait.h>
usleep(n)//n微秒
Sleep(n)//n毫秒
sleep(n)//n秒
驱动程序:
#include<linux/delay.h>
mdelay(n)//milliseconds其实现
#ifdefnotdef
#definemdelay(n)(\
{unsignedlongmsec=(n);while(msec--)udelay(1000);})
#else
#definemdelay(n)(\
(__builtin_constant_p(n)&&(n)<=MAX_UDELAY_MS)?udelay((n)*1000):\
({unsignedlongmsec=(n);while(msec--)udelay(1000);}))
#endif
调用a**/delay.h的udelay,udelay应该是纳秒级的延时
Dos:
sleep(1);//停留1秒
delay(100);//停留100毫秒
Windows:
Sleep(100);//停留100毫秒
Linux:
sleep(1);//停留1秒
usleep(1000);//停留1毫秒
每一个平台不太一样,最好自己定义一套跨平台的宏进行控制
秒还是微秒?关于延时函数sleep()
因为要写一段代码,需要用到sleep()函数,在我印象中,sleep(10)好像是休眠10微秒,结果却是休眠了10秒(在Linux下)。觉得很奇怪,因为头儿也记得好像是微秒为单位的。所以就查了一下。
原来linux下的sleep函数原型为:
unsignedintsleep(unsignedintseconds);
而MFC中的Sleep函数原型为:
voidSleep(DWORDdwMilliseconds);
也就是说,Linux下(使用的gcc的库),sleep()函数是以秒为单位的,sleep(1);就是休眠1秒。而MFC下的sleep()函数是以微秒为单位的,sleep(1000);才是休眠1秒。原来如此啊。而如果在Linux下也用微妙为单位休眠,可以使用线程休眠函数:voidusleep(unsignedlongusec);当然,使用的时候别忘记#include<system.h>哦。
另外值得一提的是,linux下还有个delay()函数,原型为externvoiddelay(unsignedintmsec);它可以延时msec*4毫秒,也就是如果想延时一秒钟的话,可以这么用delay(250)。
三、sleep函数的用法及声明
Sleep函数:
功能:执行挂起一段时间
用法:unsignedsleep(unsignedseconds);
注意:
1.在VC中使用带上头文件#include<windows.h>,在Linux下,gcc编译器中,使用的头文件因gcc版本的不同而不同#include<unistd.h>
2.在VC中,Sleep中的第一个英文字符为大写的"S",在linux下不要大写,在标准C中是sleep,不要大写,简单的说VC用Sleep,别的一律使用sleep。
3.在VC中,Sleep()里面的单位,是以毫秒为单位,所以如果想让函数滞留1秒的话,应该是Sleep(1000);在Linux下,sleep()里面的单位是秒,而不是毫秒。
四、sleep是干嘛用的
在MFC程序开发中,我们经常会使用到Sleep函数。这个函数的作用是暂停当前线程的执行。
函数原型
VOIDWINAPISleep(_In_DWORDdwMilliseconds);
注意事项
这个函数接收一个参数dwMilliseconds,指定当前线程暂停执行的时间,以毫秒为单位。我们具体看看这个参数的用法:
1)当传入的参数值为0时,表示当前线程向系统提出请求,放弃其剩余的执行时间片。系统的调度器会寻找其他已经就绪的线程并应用调度策略进行时间片分配,其他线程有机会得以执行。这里需要注意的是,一个标记为就绪的线程并不代表该线程会立即得以执行,系统调度器会考虑当前系统的状态,包括已就绪线程的执行优先级,一个线程的在真正执行之前,可能会需要等待一些时间。
2)当传入的参数值大于0时,系统会暂停当前线程的执行,并执行线程上下文环境切换,其他线程开始在调度器的介入下开始执行。
3)当传入的参数值为INFINITE时,当前线程永久性的暂停执行。此参数的使用需要谨慎:当线程创建了一个窗口,该线程必须对窗口消息作出处理,如果不慎在该线程中调用了Sleep(INFINITE),则可能导致死锁的情况。
文章分享到这里,希望我们关于sleep函数和sleep函数头文件的内容能够给您带来一些新的认识和思考。如果您还有其他问题,欢迎继续探索我们的网站或者与我们交流,我们将尽力为您提供满意的答案。