版權所有 © 2014 tutorialspoint
#include <sys/time.h> int getitimer(int which, struct itimerval *value); int setitimer(int which, const struct itimerval *value, struct itimerval *ovalue);
int getitimer(int which, struct itimerval *value); int setitimer(int which, const struct itimerval *value, struct itimerval *ovalue);
struct itimerval { struct timeval it_interval; /* next value */ struct timeval it_value; /* current value */ }; struct timeval { long tv_sec; /* seconds */ long tv_usec; /* microseconds */ };
函式getitimer() 使用value指示的結構填充which(ITIMER_REAL、ITIMER_VIRTUAL或ITIMER_PROF之一)指示的計時器的當前設定。元素it_value設定為計時器上剩餘的時間量,如果計時器已停用,則為零。類似地,it_interval設定為重置值。函式setitimer() 將指示的計時器設定為value中的值。如果ovalue非零,則將計時器的舊值儲存在那裡。
計時器從it_value遞減到零,生成訊號,然後重置為it_interval。設定為零(it_value為零或計時器超時且it_interval為零)的計時器將停止。
tv_sec和tv_usec在確定計時器的持續時間方面都很重要。
計時器永遠不會在請求時間之前超時,但可能會在之後一段時間(很短)超時,這取決於系統計時器解析度和系統負載。(但請參見下面的錯誤。)超時時,將生成訊號並重置計時器。如果計時器在程序活動時超時(對於ITIMER_VIRTUAL始終為真),則將在生成時立即傳遞訊號。否則,傳遞將被偏移一小段時間,這取決於系統負載。
gettimeofday (2)
sigaction (2)
signal (2)
在Linux上,計時器值以節拍表示。如果請求設定一個計時器,其節拍表示的值超過MAX_SEC_IN_JIFFIES(在include/linux/jiffies.h中定義),則計時器將靜默截斷到此上限值。在Linux/x86(自核心2.6.13以來,預設節拍為0.004秒)上,這意味著計時器的上限值約為99.42天。
在某些系統(包括x86)上,2.6.12版本之前的Linux核心存在一個錯誤,在某些情況下會產生最多一個節拍的提前計時器超時。此錯誤已在核心2.6.12中修復。
POSIX.1-2001指出,如果指定的tv_usec值不在0到999999範圍內,則setitimer()應該失敗。但是,Linux不會報錯,而是會靜默調整計時器的相應秒值。將來(計劃於2007年3月),這種不符合標準的情況將得到修復:現有應用程式現在應該進行修復,以確保它們提供正確格式的tv_usec值。
廣告