2010-07-02 70 views
1

有沒有辦法讓線程睡眠多天,分辨率爲微秒? usleep只能讓線程睡眠1000000,睡眠第二步。有沒有辦法,可能會同時使用睡眠和睡眠來達到此目的?睡眠多天,分辨率爲微秒

+1

請注意,usleep沒有微秒粒度:usleep()函數暫停(至少)usec微秒的調用進程的執行。睡眠 可能會因任何系統活動或花在處理呼叫上的時間或系統定時器的粒度而稍微延長。 – Sjoerd 2010-07-02 09:14:45

+2

系統時鐘可能在幾天內輕易漂移幾微秒,所以即使有可用的方法也可能不準確。 – drawnonward 2010-07-02 09:20:48

+10

我真的很想知道需要幾微秒的分辨率才能睡上幾天。 – ereOn 2010-07-02 09:26:30

回答

5

雖然還沒有醒來的時候:

  • 查看當前的時間
  • 去睡覺,當你想醒來不是有點短。

這樣,您可以定期檢查時間,越來越快,越詳細越好,當你達到想要醒來的時候。

+0

如果我正在等待一個信號喚醒我的線程,該怎麼辦? – lies 2010-07-02 09:10:02

+0

@lies如果你等待一個信號,爲什麼你需要睡覺?使用消息隊列 – Gianluca 2010-07-02 09:54:01

+1

@lies:如果在問題中發佈您的預期用途,它通常會有很大的幫助。可能有更好的選擇方式比*睡眠*,但如果你只問睡覺,那麼你不會得到這些信息。 *'要小心,如果你不知道你要去哪裏,因爲你可能不會去那裏'* - 約吉貝拉 – 2010-07-02 11:48:27

5

只需在幾個小睡眠階段分開大睡眠。

int64_t time_to_sleep = ...; 
int peroid_to_sleep = ...; 
while(time_to_sleep > 0) 
{ 
    usleep(period_slept); 
    time_to_sleep -= period_slept; 
} 
+4

...並增加更多的漂移到測量。如果你打算這樣做的話,最好在sleep()中保留秒的整數部分,在剩餘時間內保留'usleep()'。 – 2010-07-02 11:42:59