setitimer

setitimer,第一個參數which指定定時器類型(上面三種之一);第二個參數是結構itimerval的一個實例;第三個參數可不做處理。ITIMER_VIRTUAL : -以該進程在用戶態下花費的時間來計算,它送出SIGVTALRM信號。ITIMER_PROF : 以該進程在用戶態下和核心態下所費的時間來計算,它送出SIGPROF信號。it_interval指定間隔時間,it_value指定初始定時時間。tv_sec提供秒級精度,tv_usec提供微秒級精度,以值大的為先,注意1s = 1000000us。ovalue用來保存先前的值,常設為NULL。

setitimer函式參數介紹

int setitimer(int which, const struct itimerval *value, struct itimerval *ovalue));

which為定時器類型,setitimer支持3種類型的定時器:

ITIMER_REAL : 以系統真實的時間來計算,它送出SIGALRM信號。

ITIMER_VIRTUAL : -以該進程在用戶態下花費的時間來計算,它送出SIGVTALRM信號。

ITIMER_PROF : 以該進程在用戶態下和核心態下所費的時間來計算,它送出SIGPROF信號。

setitimer()第一個參數which指定定時器類型(上面三種之一);第二個參數是結構itimerval的一個實例;第三個參數可不做處理。

setitimer()調用成功返回0,否則返回-1。

struct itimerval {

struct timeval it_interval;

struct timeval it_value;

};

struct timeval {

long tv_sec;

long tv_usec;

};

it_interval指定間隔時間,it_value指定初始定時時間。如果只指定it_value,就是實現一次定時;如果同時指定 it_interval,則逾時後,系統會重新初始化it_value為it_interval,實現重複定時;兩者都清零,則會清除定時器。

tv_sec提供秒級精度,tv_usec提供微秒級精度,以值大的為先,注意1s = 1000000us。

ovalue用來保存先前的值,常設為NULL。

如果是以setitimer提供的定時器來休眠,只需阻塞等待定時器信號就可以了。

示例

fflush(stdout);利用setitimer範例

在該例子中,每隔一秒發出一個SIGALRM,每隔0.5秒發出一個SIGVTALRM信號:

#include

#include

#include

#include

#include

#include

int sec;

void sigroutine(int signo){

switch (signo){

case SIGALRM:

printf("Catch a signal -- SIGALRM \n");

signal(SIGALRM, sigroutine);

break;

case SIGVTALRM:

printf("Catch a signal -- SIGVTALRM \n");

signal(SIGVTALRM, sigroutine);

break;

}

fflush(stdout);

return;

}

int main()

{

struct itimerval value, ovalue, value2; //(1)

sec = 5;

printf("process id is %d\n", getpid());

signal(SIGALRM, sigroutine);

signal(SIGVTALRM, sigroutine);

value.it_value.tv_sec = 1;

value.it_value.tv_usec = 0;

value.it_interval.tv_sec = 1;

value.it_interval.tv_usec = 0;

//(2)

value2.it_value.tv_sec = 0;

value2.it_value.tv_usec = 500000;

value2.it_interval.tv_sec = 0;

value2.it_interval.tv_usec = 500000;

setitimer(ITIMER_VIRTUAL, &value2, &ovalue);

for(;;)

;

}

參考

alarm, gettimeofday, sigaction, signal, timer_create, timerfd_create, time, sleep, nanosleep, usleep

相關詞條

相關搜尋

熱門詞條

聯絡我們