免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 10888 | 回复: 4
打印 上一主题 下一主题

TIMER_ABSTIME是什么意思? [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2008-08-25 14:42 |只看该作者 |倒序浏览
timer_settime(tid, TIMER_ABSTIME, &ts, NULL),为什么要设置这项,谢谢。

论坛徽章:
4
2015年辞旧岁徽章
日期:2015-03-03 16:54:152015年迎新春徽章
日期:2015-03-04 09:56:11IT运维版块每日发帖之星
日期:2016-08-11 06:20:00IT运维版块每日发帖之星
日期:2016-08-15 06:20:00
2 [报告]
发表于 2008-08-25 14:50 |只看该作者

回复 #1 soqsoq 的帖子

TIMER_ABSTIME表示绝对时间;如果不设置这个标记,表示时间间隔(interval)。

论坛徽章:
0
3 [报告]
发表于 2008-08-25 14:50 |只看该作者
函数原型: #include<time.h>
              int timer_settime(timer_t timerid,int flags,const struct itimerspec *value,struct itimerspec *ovalue);
             int timer_gettime(timer_t timerid,struct itimerspec *value);
int timer_getoverrun(timer_t timerid);
   函数功能:timer_settime()设置时间直到下一个timerid指定的定时器终止。如果该函数调用时定时器已经被装备,该调用则重置时间直到value确定的下一次终止。如果value的it_value成员为零,定时器被解除。如果flag没有设定为TIMER_ABSTIME,则定时器从调用开始在it_value十亿分之一秒内超时;如果设定为TIMER_ABSTIME,该函数表现为时间直到下一次超时被设定为it_value指定的绝对时间和与timerid相联的时钟值的差值。定时器的再装由value的it_interval成员值来设定。如果参数ovalue不为空,该函数被存储在ovalue引用的地方。该函数要存储时间累计值直到timerid指定的定时器终止或重装定时器值到value参数。在任一时刻,仅有一个单一信号被派了在指定的定时器的进程中。如果支持实时信号扩展,timer_getoverrun()返回定时器终止的溢出值。

论坛徽章:
0
4 [报告]
发表于 2008-09-06 16:31 |只看该作者
#include   <stdio.h>   
  #include   <time.h>
  #include  <string.h>
  #include   <signal.h>   
  
  void handle(sigval_t   v)   
  {   
      time_t   t;   
      char   p[32];
        
      time(&t);   
      strftime(p,   sizeof(p),   "%T",   localtime(&t));   
      printf("%s thread %d,   val = %d, signal captured.\n",   p, pthread_self(),  v.sival_int);   
      return;   
  }   
   
  int  create(int   seconds,   int   id)   
  {   
      timer_t   tid;   
      struct   sigevent   se;   
      struct   itimerspec   ts,   ots;  
      
      memset(&se,   0,   sizeof(struct sigevent));   
      se.sigev_notify   =   SIGEV_THREAD;   
      se.sigev_notify_function   =   handle;   
      se.sigev_value.sival_int   =   id;   
      if(timer_create(CLOCK_REALTIME,   &se,   &tid)   <   0)   
          {   
              perror   ("timer_creat";   
              return   -1;   
          }   
      puts("timer_create   successfully.";   
      ts.it_value.tv_sec   =   3;   
      ts.it_value.tv_nsec   =   0;   
      ts.it_interval.tv_sec   =   seconds;   
      ts.it_interval.tv_nsec   =   0;   
      if(timer_settime(tid,   TIMER_ABSTIME,   &ts,   &ots)   <   0)   
        {   
              perror   ("timer_settime";   
              return   -1;   
        }   
      return   0;   
  }   
   
  int   
  main   (void)   
  {   
      create(0,   1);   
      create(0,   2);   
      for(;   
        {   
              sleep(10);   
        }   
  }


为什么一开始没有等待3秒时间,就直接显示
timer_create   successfully.
timer_create   successfully.
15:38:50 thread -1208050768,   val = 1, signal captured.
15:38:50 thread -1218540624,   val = 2, signal captured.
如果设置timer_settime(tid,   0,   &ts,   &ots)就等待3秒后再显示
15:38:50 thread -1208050768,   val = 1, signal captured.
15:38:50 thread -1218540624,   val = 2, signal captured.

论坛徽章:
0
5 [报告]
发表于 2008-09-08 09:10 |只看该作者
没人理啊。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP