Chinaunix首页 | 论坛 | 博客

13

  • 博客访问: 238982
  • 博文数量: 26
  • 博客积分: 1400
  • 博客等级: 上尉
  • 技术积分: 1000
  • 用 户 组: 普通用户
  • 注册时间: 2004-10-15 23:24
文章分类

全部博文(26)

文章存档

2011年(1)

2010年(1)

2009年(7)

2008年(17)

我的朋友

分类:

2008-12-08 23:44:25

http://blog.chinaunix.net/u1/48467/showart_1140284.html

怎样睡眠小于一秒?

在所有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()’,你设置的延迟只是最小值(译者注:实际延迟的最小值);经过这段时间的延迟, 会有一个中间时间间隔直到你的进程重新被调度到。

阅读(900) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~