2012-03-08 95 views
1

以一个为参数的睡眠呼叫的预期持续时间是多少?这是否是一段不超过1秒的随机时间?至少有一秒的随机时间?预期的睡眠时间(1)

场景:

  • 显影剂A写到按顺序执行一些步骤与输出设备的代码。该代码已发货,A离开。

  • 开发者B从现场被告知步骤j和k需要它们之间的一秒间隔。所以他在这些步骤之间插入一个sleep(1)的电话。该代码已发货且开发者B离开。

  • 开发者C想知道sleep(1)是否应该预计足够长的睡眠时间,或者是否应该使用更高分辨率的方法来确保至少1000毫秒的延迟发生。

回答

2

sleep()只保证这一进程将睡眠至少指定的时间量,所以你把它“一些随机的时间至少是一秒钟。”

类似的行为在man pagenanosleep提到:

了nanosleep()暂停调用线程的执行,直到至少在* REQ指定经过的时间...

你也可以在this question找到有用的答案。

2

我的男人页这样说:

unsigned int sleep(unsigned int seconds); 

DESCRIPTION 
    sleep() makes the calling thread sleep until seconds seconds have 
    elapsed or a signal arrives which is not ignored. 
... 
RETURN VALUE 
    Zero if the requested time has elapsed, or the number of seconds left 
    to sleep, if the call was interrupted by a signal handler. 

所以睡眠使线程休眠,只要你告诉它,而是一个信号唤醒它。我看不到进一步的保证。

如果您需要更好,更精确的等待时间,那么睡眠不够好。有nanosleep和(听起来很有趣,但是是真的)选择是唯一posix便携式睡觉亚秒(或更高精度)的方式,我知道。

+0

因此,如果返回值为零,这意味着假设没有“睡眠时间”秒。但是,如果一个信号终止了睡眠,并且线程已经睡着了949毫秒,睡眠会返回1还是0? – 2012-03-08 21:21:39

+1

尽管差异与此问题无关,但“使调用线程睡眠”(文档)和“使进程处于睡眠状态”(您的解释)不是同一回事。 – hvd 2012-03-08 21:39:39

+0

@ hvd,你是对的,我更新了我的措辞。谢谢。 – 2012-03-08 21:41:25