setitimer函数

setitimer函数有两个功能,一个是指定某个时间之后执行某个信号处理函数,一个是指定间隔某个时间之后执行某个信号处理函数

函数原型:

int setitimer(int which, const struct itimerval *new_value,struct itimerval *old_value);

which是定时器的类型,有3种

ITIMER_REAL:以系统真实的时间来计算,它送出SIGALRM信号

ITIMER_VIRTUAL:以该进程在用户态下花费的时间来计算,它送出SIGVTALRM信号

ITIMER_PROF:以该进程在用户态下和内核态下所费的时间来计算,它送出SIGPROF信号

new_value的类型为struct itimerval

  struct itimerval {
          struct timeval it_interval; /* next value */
          struct timeval it_value;    /* current value */
           };
      struct timeval {
          long tv_sec;                /* seconds */
          long tv_usec;               /* microseconds */
           };
it_value表示第一次产生SIGALRM信号的时间,定时器然后设置为it_interval,以后每隔这个时间产生一个SIGALRM信号

如下的示例程序:

#include <stdio.h>
#include <unistd.h>
#include <signal.h>
#include <string.h>
#include <stdlib.h>
#include <sys/time.h>

void print(int num)
{
	fprintf(stderr,"hello, world\n");
}

void main(int argc, char **argv)
{
	signal(SIGALRM, print);//设置信号处理函数

	struct itimerval tick;
	memset(&tick, 0, sizeof(tick));

	tick.it_value.tv_sec = 4;
	tick.it_value.tv_usec = 0;
	tick.it_interval.tv_sec = 1;
	tick.it_interval.tv_usec = 0;

	int ret = setitimer(ITIMER_REAL, &tick, NULL);
	if(ret == -1)
	{
		fprintf(stderr,"setitimer error\n");
		exit(-1);
	}
	
	for(;;)
		pause();
}

首先4秒后输出hello world,以后每隔1秒输出hello,world


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值