以下摘自linux下的man檔案:(man getitimer)
#include <sys/time.h>
int getitimer(int which, struct itimerval * curr_value);
int setitimer(int which, const struct itimerval * new_value, struct itimerval * old_value);
描述:
Linux系統中提供為每個程序提供了三個間隔定時器,在不同的時間域的每一個遞減。
當任何定時器逾時,則發送一個信号到該過程,并在定時器(可能)重新啟動。
ITIMER_REAL: 實時遞減,時間到發送SIGALRM信号;
ITIMER_VIRTUAL:遞減隻有當程序正在執行,并且期滿後可提供SIGVTALRM
ITIMER_PROF: 當程序執行或者是系統為程序排程的時候,減少計數,時間到了,發出SIGPROF信号,這個和ITIMER_VIRTUAL聯合,常用來計算系統核心時間和使用者時間。
以下結果體中定義了定時器的值:
struct itimerval
{
struct timerval it_interval; //next value;
struct timerval it_value; //current value;
};
struct timeval
long tv_sec; //seconds;
long tv_usec; //microseconds;
}
it_interval用來指定每隔多長時間執行任務, it_value用來儲存目前時間離執行任務還有多長時間。比如說, 你指定it_interval為2秒(微秒為0),開始的時候我們把it_value的時間也設定為2秒(微秒為0),當過了一秒, it_value就減少一個為1, 再過1秒,則it_value又減少1,變為0,這個時候發出信号(告訴使用者時間到了,可以執行任務了),并且系統自動把it_value的時間重置為 it_interval的值,即2秒,再重新計數。
使用ITMER_REAL定時器,每隔2秒鐘都會發送一個SIGALRM信号,當主函數接收到了這個信号之後,調用信号處理函數 prompt_info在輸出time is running out這個字元串。
對于ITIMER_VIRTUAL和ITIMER_PROF的使用方法類似,在setitimer裡面設定的定時器為 ITIMER_VIRTUAL的時候,并把sigaction裡面的SIGALRM改為SIGVTALARM,
而ITIMER_PROF對應SIGPROF。