Linux--alarm与setitimer两个定时函数
发布时间
阅读量:
阅读量
alarm函数和setitimer函数都可以触发14号SIGALRM信号
alarm
#include <unistd.h>
unsigned int alarm(unsigned int seconds); //参数为定时的秒
注意:alarm只会触发一次。
示例程序:
#include<stdio.h>
#include<stdlib.h>
#include<unistd.h>
#include<signal.h>
void handler(int s) {
printf("time out!\n");
}
int main() {
signal(SIGALRM, handler);
alarm(3); //3秒后发出14号SIGALRM信号,去执行handler函数
for (;;) {
printf(".");
fflush(stdout);
sleep(1);
}
}
setitimer
#include <sys/time.h>
int setitimer(int which, const struct itimerval *new_value,
struct itimerval *old_value);
//第一个参数代表何种计时方式,ITIMER_REAL代表以桌面时间计时。
//第二个参数代表设置的定时器。
//第三个参数代表如过你设置了新的计时器,返回旧的计时器。一般不用就写NULL
其中第二个参数的结构体内容如下:
struct itimerval {
struct timeval it_interval; /* next value定时的间隔时间 */
struct timeval it_value; /* current value第一次启动的时间 */
};
struct timeval {
time_t tv_sec; /* seconds 秒*/
suseconds_t tv_usec; /* microseconds 微妙*/
};
//如果秒跟微秒同时为0代表永不启动。
//一般想要立即启动计时器,那就把秒设为0,微妙设为1.
示例程序:
#include<stdio.h>
#include<stdlib.h>
#include<unistd.h>
#include<signal.h>
#include<sys/time.h>
void handler(int s) {
printf("time out\n");
}
int main() {
signal(SIGALRM, handler);
struct itimerval it;
it.it_value.tv_sec = 0;
it.it_value.tv_usec = 1; //1微秒后启动
it.it_interval.tv_sec = 3; //每隔三秒发一次时钟信号
it.it_interval.tv_usec = 0;
setitimer(ITIMER_REAL, &it, NULL);
for (;;) {
printf(".");
fflush(stdout);
sleep(1);
}
return 0;
}
全部评论 (0)
还没有任何评论哟~
