linux 时间定时器,linux 定时器

在linux下提供了两种基本的Timer机制:alarm和settimer。

1、alarm

#include

unsigned int alarm(unsigned int seconds);

这是个最简单的Timer,当调用了alarm(n)时,等待n秒后,就会触发一次SIGALRM信号,故需要在调用alarm函数前先设置好 SIGALRM信号对应的处理函数才行,而当调用alarm(0)时,表示停止当前的timer处理,不要发出SIGALRM信号。

返回值:返回上一次调用alarm函数的剩余秒好,若之前没有调用alarm函数,则返回0。

例(第一次等待1秒触发Timer,之后都是2秒触发):

#include

#include

#include

using namespace std;

void my_alarm_handler(int a){

cerr<

alarm(2);//更改为2秒调用一次Timer

}

int main(){

signal( SIGALRM, my_alarm_handler );

alarm(1);

while(1){}

return 0;

}

2、settimer

#include

#define ITIMER_REAL 0

#define ITIMER_VIRTUAL 1

#define ITIMER_PROF 2

int getitimer(int which, struct itimerval *value);

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

settimer和gettimer函数都提供了三种类别的Timer供使用:

1)、ITIMER_REAL:以系统实际的时间来计算,触发时会发出SIGALRM信号。

2)、ITIMER_VIRTUAL:只计算进程的执行时间(在用户态),触发时会发出SIGVTALRM信号。

3)、ITIMER_PROF:计算进程在用户态和内核态的处理时间,触发时会发出SIGPROF信号。

通过第一个参数which来指定要使用哪一种Timer(ITIMER_REAL、ITIMER_VIRTUAL、ITIMER_PROF)。 settimer函数是用来设置对应的Timer的触发时间是多少,而gettimer函数是用来获取上一次Timer设置的时间。设置的时间是一个结构 体struct itimerval:

struct itimerval {

struct timeval it_interval;

struct timeval it_value;

};

struct timeval {

long tv_sec;

long tv_usec;

};

settimer由第二个参数value设置触发时间,第三个参数ovalue用来获取上一次settimer设置的itimerval值(该参数可以设 置为NULL)。对于itimerval里面变量的值,当我们设置it_interval的值为0时,Timer只会触发一次,而it_value设置为 0时则表示Timer结束。

返回值:0为成功,-1为失败。

例(第一次等待1秒触发Timer,之后都是2秒触发):

#include

#include

#include

using namespace std;

void my_alarm_handler(int a){

cerr<

}

int main(){

struct itimerval t;

t.it_interval.tv_usec = 0;

t.it_interval.tv_sec = 2;

t.it_value.tv_usec = 0;

t.it_value.tv_sec = 1;

if( setitimer( ITIMER_REAL, &t, NULL) < 0 ){

cerr<

return -1;

}

signal( SIGALRM, my_alarm_handler );

while(1){

sleep(2);

}

return 0;

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值