Linux中sleep的解惑

来源:互联网 发布:java如何调用dll 编辑:程序博客网 时间:2024/06/16 02:55

应用程序:
#include <syswait.h>
usleep(n) //n微秒
Sleep(n)//n毫秒
sleep(n)//n秒
驱动程序:
#include <linux/delay.h>
mdelay(n) //milliseconds 其实现
#ifdef notdef
#define mdelay(n) (\
{unsigned long msec=(n); while (msec--) udelay(1000);})
#else
#define mdelay(n) (\
(__builtin_constant_p(n) && (n)<=MAX_UDELAY_MS) ? udelay((n)*1000) : \
({unsigned long msec=(n); while (msec--) udelay(1000);}))
#endif
调用asm/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函数原型为:
        unsigned int sleep(unsigned int seconds);
而MFC中的Sleep函数原型为:
        void Sleep(DWORD dwMilliseconds);
也就是说,Linux下(使用的gcc的库),sleep()函数是以秒为单位的,sleep(1);就是休眠1秒。而MFC下的sleep()函数是以微秒为单位的,sleep(1000);才是休眠1秒。原来如此啊。而如果在Linux下也用微妙为单位休眠,可以使用线程休眠函数:void usleep(unsigned long usec);当然,使用的时候别忘记#include <system.h>哦。
 
    另外值得一提的是,linux下还有个delay()函数,原型为extern void delay(unsigned int msec);它可以延时msec*4毫秒,也就是如果想延时一秒钟的话,可以这么用 delay(250);
-------------------------------------------------------------------------------------------------------

  使用权限 : 所有使用者

  使用方式 : sleep [--help] [--version] number[smhd]

  说明 : sleep 可以用来将目前动作延迟一段时间

  参数说明 :

  --help : 显示辅助讯息

  --version : 显示版本编号

  number : 时间长度,后面可接 s、m、h 或 d

  其中 s 为秒,m 为 分钟,h 为小时,d 为日数

  例子 :

  显示目前时间后延迟 1 分钟,之后再次显示时间 :

  date;sleep 1m;date
------------------------------------------------------------------------------------------------

用途说明

sleep命令常用于在shell脚本中延迟时间。

 

常用方式

注意:以下用法中<n>可以为小数。

 

格式:sleep <n>

格式:sleep <n>s

延迟<n>秒。

 

格式:sleep <n>m

延迟<n>分钟。

 

格式:sleep <n>h

延迟<n>小时。

 

格式:sleep <n>d

延迟<n>天。

 

使用示例

示例一

[root@jfht ~]# date; sleep 5; date 
2011年 04月 17日 星期日 19:49:23 CST
2011年 04月 17日 星期日 19:49:28 CST
[root@jfht ~]#

 

示例二

[root@jfht ~]# date; sleep 1.5m; date 
2011年 04月 17日 星期日 19:50:06 CST
2011年 04月 17日 星期日 19:51:36 CST
[root@jfht ~]#

 

问题思考

相关资料

【1】中国IT实验室 linux sleep命令详解 
http://linux.chinaitlab.com/command/808582.html
【2】bbs.ChinaUnix.net 用sleep命令代替crontab定期执行命令
http://bbs.chinaunix.net/thread-2193921-1-1.html

原创粉丝点击