程序让生活更美好

半亩方塘 天光云影

  C++博客 ::  :: 新随笔 :: 联系 ::  :: 管理 ::
  55 随笔 :: 4 文章 :: 202 评论 :: 0 Trackbacks
   
        刚好写程序的时候要使用定时器,就是定时的做一些操作,网上查了一下,自己也学着写了写,网上倒是说的好多种,我在这里就不做过多介绍了,就说我用的这个,使用setitimer函数。

函数原型
 int setitimer(int which, const struct itimerval *value, struct itimerval *ovalue);

参数说明

   参数which
  参数 which是定时器类型

取值

含义

信号发送

ITIMER_REAL

定时真实时间,与alarm类型相同。

SIGALRM

ITIMER_VIRT

定时进程在用户态下的实际执行时间。

SIGVTALRM

ITIMER_PROF

定时进程在用户态和核心态下
的实际执行时间。

SIGPROF


 

   这三种定时器定时完成时给进程发送的信号各不相同,其中ITIMER_REAL类定时器发送SIGALRM信号,ITIMER_VIRT类定时器发送SIGVTALRM信号,ITIMER_PROF类定时器发送SIGPROF信号。

   参数 value
   结构itimerval描述了定时器的组成。
1 struct itimerval 
2 {
3 struct timeval  it_interval;   /* 下次定时取值 */
4 struct timeval  it_value;       /* 本次定时设置值 */
5 }
6 
    结构timeval描述的是精确到微秒的结构。
1 struct timeval 
2 {
3 long    tv_sec;      /* 秒(1000000微秒) */
4 long    tv_usec;     /* 微妙 */
5 }
6 

   itimerval结构中的it_value是代表首次定时的时间,而it_interval代表下一次定时的时间,执行完第一次之后,it_interval中的时间会赋值给it_value,周而复始。如果it_value值被设置为0,则定时器停止定时;如果it_value值不为0但it_interval值为0,则定时器在一次定时后终止。
   setitimer执行成功返回0,否则返回-1

参数ovalue
  该参数可以使用空值NULL,如果不为空的话,返回的是上一个时刻的定时器状态。

下面写的一个简单的例子程序。

 1 #include <stdio.h>
 2 #include <stdlib.h>
 3 #include <unistd.h>
 4 #include <signal.h>
 5 #include <time.h>
 6 #include <sys/time.h>
 7 
 8 int n=0;
 9 void doAction(int sig)//你要做的事情
10 {
11     printf("让一切痛苦随风而去 %d\n",n++);
12     signal(SIGALRM,doAction);
13 }
14 void setMyTimer(int val)
15 {
16     struct itimerval value;
17     value.it_value.tv_sec=val;
18     value.it_value.tv_usec=0;
19     value.it_interval.tv_sec=val; //val秒
20     value.it_interval.tv_usec=0;
21     signal(SIGALRM, doAction);
22     setitimer(ITIMER_REAL,&value,NULL);
23     while(1);
24 }
25 
26 int main( int argc, char **argv )
27 {
28     if (argc<2)
29     {
30         printf("请您输入参数:\n");//第二个参数是定时器的时长的,单位是秒
31         return -1;
32     }
33     int val=atoi(argv[1]);
34     printf("%d\n",val);
35      setMyTimer(val);
36     return 0;
37 }

代码就不解释了,就是启动的时候获得第二个参数,用作定时器的时间,然后打印出“让一切痛苦随风去 0”,如此循环。
在AIX5.2下,使用XLC++V7.0编译通过。

运行效果如下

posted on 2009-06-02 15:46 北风之神007 阅读(3175) 评论(1)  编辑 收藏 引用 所属分类: c/c++

评论

# re: 简单介绍UNIX下编写定时器程序 2012-08-12 09:39 pictureyong
最好在while(1);加一个完不成的操作,否则太耗cpu了。  回复  更多评论
  


只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理