float值in - struct itimerspec

时间:2011-03-28 06:29:10

标签: c unix timer long-integer

我有这个问题: 我使用itimerspec结构创建了一个结构。 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秒等。但仅限在几秒钟内。

2 个答案:

答案 0 :(得分:1)

您无法为长值分配双精度数。如果您需要的时间少于1秒,则应根据使用情况表达。

0.1秒= 100000 usec

做:

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

答案 1 :(得分:1)

你必须调整到secs和nanosecs,例如0.1秒= 0秒和100,000毫秒。