setitimer用法

Linux setitimer()有两个功能,一是指定一段时间后,才执行某个function,二是每间格一段时间就执行某个function,以下程序demo如何使用Linux setitimer()。

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

参数:

which为定时器类型 本例中用的是 ITIMER_REAL

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

value 是一个结构体 如下:

struct itimerval {

  struct timeval it_interval;
  struct timeval it_value;
  };
  struct timeval {
  long tv_sec;
  long tv_usec;
  };

it_interval和it_value的区别结尾出有说明     tv_sec单位是秒   tv_usec单位是微妙

ovalue 一般设置成NULL

下面看一个例子:

/*
 * timer.c
 *
 *  Created on: 2012-8-28
 *      Author: zhenglq
 */

#include <signal.h> // signal()
#include <sys/time.h> // setitimer()
#include <unistd.h> // pause()
#include <stdio.h> // printf
#include <string.h>  // for memset()

void printMSG(int num);

void printMSG(int num)
{
	printf("hello,world!");
}

int main()
{
	int res =0;
	signal(SIGALRM,printMSG);

	struct itimerval tick;

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

	tick.it_value.tv_sec = 5;
	tick.it_value.tv_usec = 0;

	tick.it_interval.tv_sec = 2;
	tick.it_interval.tv_usec = 0;

	res = setitimer(ITIMER_REAL,&tick,NULL);
	//printf("res=%d\n",res);
	if(res)
	{
		printf("setitimer failure!");
	}

	while(1)
	{
		pause();
		printf("pause\n");
	}
	return 0;
}

这个例子网上搜下有很多,不过网上对结构体填充说的有点不够详细,自己写例子验证了下。

如果你要延长一段时间执行函数,那么你只要填充it_value就可以。如果你需要每隔一段时间执行一次it_value,那么你需要两个都填充。如果你只填充了it_interval是打印不出helloworld的。(在rhel5.4上面编译测试过了)。


还有一个问题是如果我把while(1)里的printf("pause\n");注释掉,编译,执行,“hello,world!”也打印不出来。这点不知道为什么会这样,如果谁知道请留言告知,感激万分


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值