секунда к наносекунде - структура itimerspec - PullRequest
1 голос
/ 28 марта 2011

Я заполняю структуру timepec. Предполагается, что пользователь всегда будет вводить значения в секундах (также может быть 0,01 секунды), поэтому мы конвертируем секунды в наносекунды, используя: lt_leak_start = atoll(getenv("LT_LEAK_START")) * sec_to_nsec; где переменная static long sec_to_nsec = 1000000000;, а затем используем его в качестве аргумента для settime: timer_settime(timerid,0,&its,NULL) , Но при этом возникает ошибка: settimer failed: Invalid argument

Пожалуйста, помогите мне.

Заранее спасибо.

enter code here
 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 */        
 }; 

Код, который я пытаюсь найти здесь:

static long sec_to_nsec = 1000000000;
lt_leak_start = atoll(getenv("LT_LEAK_START")) * sec_to_nsec;

/* Setting timer interval */

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

/* Setting timer expiration */

its.it_value.tv_sec=0;  // First expiry after 1 sec
its.it_value.tv_nsec=lt_leak_start;

timer_create(CLOCK_REALTIME,&sevp,&timerid);

if(timer_settime(timerid,0,&its,NULL)==-1) {
  perror("settimer failed");
  exit(1);
}

Ответы [ 2 ]

2 голосов
/ 28 марта 2011
double d = strtod(getenv("LT_LEAK_START"), 0);
...
its.it_value.tv_sec=(time_t) d;
its.it_value.tv_nsec=(d - (time_t) d) * sec_to_nsec;

Считать переменную среды как двойную. Сохраните вторую часть в tv_sec, а наносекундную часть в tv_nsec.

2 голосов
/ 28 марта 2011

tv_nsec не должно превышать 999 999 999.Вы устанавливаете это больше, чем это.

...