2012-03-08 55 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