Linux下的定时器

#include <sys/select.h> 
#include <sys/time.h> 
int getitimer(int which, struct itimerval *value); 
int setitimer(int which, const struct itim erval value, struct itimerval *ovalue); 
 
   函数setitimer 可以提供三种定时器,  它们相互独立,  任意一个定时完成都将发送定时信号到进程,  并且
重新计时.  参数which确定了定时器的类型: 
  (1) ITIMER_REAL.  定时真实时间,  与alarm 类型相同.  对应信号为SIGALRM. 
  (2) ITIMER_VIRT.  定时进程在用户态下的实际执行时间.  对应信号为SIGVTALRM. 
  (3) ITIMER_PROF. 定时进程在用户态和核心态下的实际执行时间.  对应信号为SIGPROF. 
   在一个UNIX进程中,  不能同时使用alarm 和ITIMER_REAL 类定时器. 
   结构itimerval 描述了定时器的组成: 
struct itimerval{ 
      struct timeval it_interval; 
      struct timeval it_value; 

   结构成员it_value 指定首次定时的时间,  结构成员it_interval 指定下次定时的时间.  定时器工作时,  先
将it_value 的时间值减到 0,  发送一个信号,  再将it_vale 赋值为it_interval 的值,  重新开始定时,  如此反复. 
如果it_value 值被设置为0,  则定时器停止定时. 
   结构timeval 秒数了一个精确到微秒的时间: 
struct timeval{ 
      long tv_sec; 
      long tv_usec; 

   下面设计了一个精确定时器的例子,  进程每1.5秒发送定时信号 SIGPROF,  用户可键入Ctrl+C 或
Delete 结束程序. 
[bill@billstone Unix_study]$ cat time3.c 


#include <sys/select.h> 
#include <sys/time.h> 
#include <stdio.h> 
#include <unistd.h> 
#include <signal.h> 
  
int n = 0; 
  
void timefunc(int sig){ 
        fprintf(stderr, "ITIMER_PROF[%d]\n", n++); 
        signal(SIGPROF, timefunc); 
} 
  
int main() 
{ 
        struct itimerval value; 
  
        value.it_value.tv_sec = 1; 
        value.it_value.tv_usec = 500000; 
 
        value.it_interval.tv_sec = 1; 
        value.it_interval.tv_usec = 500000; 
        signal(SIGPROF, timefunc); 
        setitimer(ITIMER_PROF, &value, NULL); 
        while(1); 
  
        return 0; 
} 




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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值