setitimer延时、定时
#include <sys/time.h>
int setitimer(
int which,
const struct itimerval * new_value,
struct itimerval * old_value
);
struct itimerval{
struct timeval it_interval; //周期执行时间
struct timeval it_value; //延迟执行时间
};
struct timeval{
time_t tv_sec; //秒
suseconds_t tv_usec; //微秒
};
参数
which :
ITIMER_REAL:以系统真实的时间来计算,送出SIGALRM信号。 ITMER_VIRTUAL:以该进程在用户态下花费的时间来计算,送出SIGVTALRM 信号。
ITMER_PROF:以该进程在用户态下和内核态下所费的时间来计算,送出SIGPROF信号。
old_value:
一般置为NULL,用来存储上一次setitimer调用时设置的new_value。
返回值
调用成功返回0,否则返回-1。
工作机制
it_value倒计时,为0时触发信号,it_value重置为it_interval,继续倒计时,周期执行。
周期执行时,it_value不为0,设置it_interval;
延迟执行时,设置it_value,it_interval为0。
例子
#include <stdio.h>
#include <signal.h>
#include <sys/time.h>
void signalHandler(int signo){
switch (signo){
case SIGALRM:
printf("Caught the SIGALRM signal!\n");
break;
}
}
//延时1微秒便触发一次SIGALRM信号,以后每隔200毫秒触发一次SIGALRM信号。
int main