Chinaunix首页 | 论坛 | 博客
  • 博客访问: 420859
  • 博文数量: 117
  • 博客积分: 5235
  • 博客等级: 大校
  • 技术积分: 1775
  • 用 户 组: 普通用户
  • 注册时间: 2007-09-12 15:51
文章分类

全部博文(117)

文章存档

2012年(9)

2011年(2)

2010年(21)

2009年(13)

2008年(72)

我的朋友

分类: LINUX

2008-08-22 14:15:00

怎样睡眠小于一秒?

在所有Unix中都有的‘sleep()’函数只允许以秒计算的时间间隔。如果你想要更细化,那么你需要寻找替换方法:

  • 许多系统有一个‘usleep()’函数

  • 你可以使用‘select()’或‘poll()’, 并设置成无文件描述符并试验; 一个普遍技巧是基于其中一个函数写一个‘usleep()’函数。 (参见comp.unix.questions FAQ 的一些例子)

  • 如果你的系统有itimers(很多是有的)(译者注: setitimer和getitimer是两个操作itimers的函数, 使用“man setitimer”确认你的系统支持), 你可以用它们自己撺一个‘usleep()’。 (参见BSD源程序的‘usleep()’以便知道怎样做)

  • 如果你有POSIX实时(realtime)支持, 那会有一个‘nanosleep()’函数。

众观以上方法,‘select()’可能是移植性最好的(直截了当说,它经常比 ‘usleep()’或基于itimer的方法更有效)。但是,在睡眠中捕获信号的做法会有所不同;基于不同应用,这可以成为或不成为一个问题。

无论你选择哪条路,意识到你将受到系统计时器分辨率的限制是很重要的(一些系统允许设置非常短的时间间隔,而其他的系统有一个分辨率,比如说10毫秒,而且总是将所有设置时间取整到那个值)。而且,关于‘sleep()’,你设置的延迟只是最小值(译者注:实际延迟的最小值);经过这段时间的延迟,会有一个中间时间间隔直到你的进程重新被调度到。

阅读(1193) | 评论(0) | 转发(0) |
0

上一篇:linux面试

下一篇:转:进程控制

给主人留下些什么吧!~~