登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

守望

路越远,心越近。有多远,走多远!

 
 
 

日志

 
 

Linux定时器使用  

2011-07-17 17:52:52|  分类: 编程 |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |
(1)alarm()
       头文件:#include <unistd.h>
        原型:unsigned int alarm(unsigned int seconds);
        描述:alarm()指定在经过seconds秒后向进程发送SIGALRM信号,如果有事件发生,alarm取消。
                   由于sleep()可能是用SIGALRM实现的,混合调用alarm()和sleep()可不是个好主意。
(2)setitimer()
       头文件:#include <sys/time.h>
       原型:int setitimer(int which, const struct itimerval *value, struct itimerval *ovalue);
       描述:setitimer()可以设置3中类型的定时器,当定时器超时后,向进程发送信号,
                  并且定时器重新计时。
                  ITIMER_REAL:以系统实时时间计时,超时后发送SIGALRM
                  ITIMER_VIRTUAL:以进程的用户态执行时间计时,超时后发送SIGVTALRM
                  ITIMER_PROF:以进程的执行时间(包括用户态和核心态的执行时间)计时,超时后
                                            发送SIGPROF。
         参数描述:value:新的定时时间;ovalue:原来的定时时间
                 struct itimerval {
                           struct timeval it_interval; /* next value */
                           struct timeval it_value;    /* current value */
                  };
                  struct timeval {
                           long tv_sec;                /* seconds */
                           long tv_usec;               /* microseconds */
                  };
         简单示例:
                  #include <stdio.h>
                  #include <stdlib.h>
                  #include <signal.h>
                  #include <sys/time.h>
                  #include <unistd.h>

                  struct timeval curtime;
                  void sighandler(int signo)
                  {
                          if(signo == SIGALRM)
                          {
                                  gettimeofday(&curtime, NULL);
                                  printf("curtime:%d:%03d\n", curtime.tv_sec, curtime.tv_usec/1000);
                          }
                  }

                  int main()
                  {
                          struct itimerval ival;
                          struct itimerval oval;

                          ival.it_interval.tv_sec = 0;
                          ival.it_interval.tv_usec = 30000;
                          ival.it_value.tv_sec = 0;
                          ival.it_value.tv_usec = 30000;

                          signal(SIGALRM, sighandler);
                          setitimer(ITIMER_REAL, &ival, &oval);

                          while(1)
                          {
                                  pause();
                          }
                  }
  评论这张
 
阅读(938)| 评论(0)

历史上的今天

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2018