setitimer на linux округляется? - PullRequest
1 голос
/ 28 июля 2011

Когда я устанавливаю короткий тайм-аут с помощью setitimer, а затем запрашиваю установленное значение (с getitimer или другим setitimer) в системе Linux 2.6.26 (Debian 5.0.5), я получаю значение выше чем я установил:

#include <sys/time.h>
#include <iostream>

int main() {
  struct itimerval wanted, got;

  wanted.it_value.tv_sec     = 0;
  wanted.it_value.tv_usec    = 7000;
  wanted.it_interval.tv_sec  = 0;
  wanted.it_interval.tv_usec = 0;

  setitimer(ITIMER_VIRTUAL, &wanted, NULL);
  getitimer(ITIMER_VIRTUAL, &got);

  std::cerr << "we said: " << wanted.it_value.tv_usec << "\n"
            << "linux set: " << got.it_value.tv_usec << std::endl;

  return 0;
}

возвращается:

we said: 7000
linux set: 12000

Это проблематично, поскольку мы используем время, оставшееся после некоторых вычислений, и оно слишком велико.

Это известная проблема? (поиск в Google не сработал.) У кого-нибудь есть хороший обходной путь?

1 Ответ

1 голос
/ 29 июля 2011

В документации POSIX функции setitimer есть примечание

Реализации могут накладывать ограничения на гранулярность значений таймера.Для каждого интервального таймера, если запрашиваемое значение таймера требует более высокой степени детализации, чем поддерживает реализация, фактическое значение таймера должно быть округлено до следующего поддерживаемого значения

Степень детализации в вашей системе вышечем 1000 мкс (кажется, 6000 мкс), а значение таймера округляется в большую сторону.Детализация таймера - проблема, если вам нужна такая точность.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...