手冊頁getitimer(2)聲稱,爲什麼tv_sec和tv_usec在確定定時器的持續時間方面有重要意義?
都tv_sec和確定定時器
的 時間tv_usec顯著它不會去說這是爲什麼。在我遇到tv_sec的許多例子中,我們將其設置爲0,而tv_usec則給出了一些合理的值,反之亦然。這些定時器是同時倒計時,還是總倒計時間tv_sec + tv_usec?我應該同時使用嗎?都不是?
手冊頁getitimer(2)聲稱,爲什麼tv_sec和tv_usec在確定定時器的持續時間方面有重要意義?
都tv_sec和確定定時器
的 時間tv_usec顯著它不會去說這是爲什麼。在我遇到tv_sec的許多例子中,我們將其設置爲0,而tv_usec則給出了一些合理的值,反之亦然。這些定時器是同時倒計時,還是總倒計時間tv_sec + tv_usec?我應該同時使用嗎?都不是?
的man page記錄了timeval
結構:
struct timeval {
long tv_sec; /* seconds */
long tv_usec; /* microseconds */
};
如果你想等待幾秒鐘,你只需設置tv_sec
。如果你想等一秒鐘,你會設置tv_usec
。如果你想等待4.5秒,你會設置這兩個到適當的值(分別爲4和500000)
另外,是usec不允許超過1秒? – Ziggy 2012-02-23 05:30:57
POSIX似乎沒有爲所有角落情況指定任何行爲(tv_usec <0,tv_nsec <0,tv_usec> 1000000,tv_nsec> 1000000000),所以最好不要發生這種情況。 – 2012-02-23 05:38:13
是的,總時間是兩者的總和。 tv_sec是秒。而tv_usec超出了那個微秒。
所以例如,如果我給他們的值分別爲1和250000,這將是1.25秒? – Ziggy 2012-02-23 05:19:11
是的。這將是1.25 – 2012-02-23 05:20:04
的結構雖然描述:
struct timeval {
long tv_sec; /* seconds */
long tv_usec; /* microseconds */
};
正如你看到的,總的時間爲tv_sec + (1.0/1000000) * tv_usec
秒。這就是爲什麼當你需要設置tv_usec
第二下時,當你需要的時間超過1秒同時設置了(但通常最終只tv_sec
設置)
我編輯的答案已經包括1/100萬而不是 – 2012-02-23 05:22:25
我有內存泄漏,因爲我沒有設置tv_usec。 Comuter獲得這兩個值的總和,如果你沒有初始化其中的一個值,那麼總和值可能是隨機的。
long int tv_usec這是剩餘時間( 秒的一小部分),表示爲微秒數。它總是比一百萬更少的 。
tv_sec將處理整秒,而tv_usec處理微秒。
微秒將達到其最大值(100萬)時重置爲0,並像秒錶一樣增加秒數。
我不相信該手冊頁包括「爲什麼......」 – 2012-02-23 05:17:47
你是一個聰明的傢伙! – Ziggy 2012-02-23 05:19:27