cpp的usleep功能有多不准确?

时间:2012-01-23 09:14:28

标签: linux usleep

我想衡量一下usleep的不准确程度。 我的意思是,如果我写在我的程序中     usleep(5000) 睡眠的最长时间是多少?

提前致谢

2 个答案:

答案 0 :(得分:3)

除非你有RTOS内核,否则最长时间是永久的。

usleep(或nanosleep或任何睡眠)保证等待至少与你告诉它一样,四舍五入到系统计时器粒度,除非信号被捕获。您知道信号是否来自返回值。

在此之后,您的线程将准备好运行,并且最终将由调度程序自行决定再次运行。取决于您不知道的一千个因素,这可能是下一个纳秒或5分钟,或从不。

答案 1 :(得分:2)

现代Linux系统上的

usleep使用nanosleep系统调用,因此它不会遇到旧实现的信号相关问题。另一方面,它仍受系统定时器分辨率的影响,这是内核和硬件特定的。

那就是说,来自usleep手册页:

  

POSIX.1-2001声明此功能已过时;使用nanosleep(2)代替。 POSIX.1-2008删除了usleep()的规范。