значение с плавающей запятой в - struct itimerspec - PullRequest
0 голосов
/ 28 марта 2011

У меня есть проблема: я создал структуру, используя структуру 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 с, 2 с и т. Д. Но только в секундах.

Ответы [ 2 ]

1 голос
/ 28 марта 2011

Вам нужно будет настроить количество секунд и наносек, например, 0,1 секунды = 0 и 100 000 нсек.

1 голос
/ 28 марта 2011

Вы не можете присвоить двойное значение длинному значению. Если вам нужно менее 1 секунды, вы должны выразить это в терминах использования.

0,1 сек = 100000 мксек

Do:

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