2011-03-28 60 views
0

我有这个问题: 我已经创建了一个使用itimerspec结构的结构。该itimerspec结构有两个字段:float value in - struct itimerspec

struct timespec { 
      time_t tv_sec;    /* Seconds */ 
      long tv_nsec;    /* Nanoseconds */ 
     }; 

     struct itimerspec { 
      struct timespec it_interval; /* Timer interval */ 
      struct timespec it_value;  /* Initial expiration */ 
     }; 

所以,当我进入:

enter code here 
    struct itimerspec its; // argument to timer_gettime 
     /* Setting timer interval */ 

     its.it_interval.tv_sec=0; 
     its.it_interval.tv_nsec=1; 

     /* Setting timer expiration */ 
     its.it_value.tv_sec=0.1; // First expiry after 1 sec 
     its.it_value.tv_nsec=0; 

    On compilation: 
     prototype1.cc:115: warning: converting to ‘__time_t’ from ‘double’ 

我的问题是:按照设计,用户可以在全数字(1进入计时器到期,2 ,3等),但也可以输入时间如0.1秒,o.2秒等,但仅在几秒钟内。

回答

1

你将不得不调整到秒和nanosecs,例如0.1秒= 0秒和100,000秒。

+0

好吧,你的意思是0.1秒= 10 ^(8)nsecs。这是可以接受的解决方案。但是,有没有直接的方式来填补这一点? – kingsmasher1 2011-03-28 06:41:15

+0

@ kingsmasher1:timespec允许您以毫微秒的精度指定任何时间。只需输入秒和纳秒分别为tv_sec和tv_nsec。 – rturrado 2011-03-28 06:53:38

+0

请参阅此链接:http://stackoverflow.com/questions/5457489/second-to-nanosecond-struct-itimerspec。我现在正面临一个新问题,使用上述转换。 – kingsmasher1 2011-03-28 10:18:06

1

您不能将double赋给long val。如果你需要少于1秒,你应该用usec来表达它。

0.1秒= 100000微秒

务必:

its.it_value.tv_sec=0; // First expiry after 1 sec 
its.it_value.tv_nsec= 0.1 * (usec in sec); 
+0

@Overbose:怎么样?但itimerspec不采用usec。 itimerspec是timer_settime所必需的。 – kingsmasher1 2011-03-28 06:34:20

+0

@Overbose:这是itimerspec的原型:long sys_timer_settime(timer_t timer_id,int flags,const struct itimerspec * new_setting,struct itimerspec * old_setting); – kingsmasher1 2011-03-28 06:35:48

+0

ITYM *分配*? (或者至少我希望你能做到!)。 – 2011-03-28 07:01:51