Мне нужен таймер с разрешением 1 мс под Linux. Он используется для увеличения значения таймера, которое, в свою очередь, используется для определения необходимости запуска различных событий. POSIX timerfd_create не является опцией из-за требования glibc. Я пробовал timer_create и timer_settimer, но лучшее, что я получаю от них, - это разрешение 10 мс, меньшие значения, по-видимому, по умолчанию имеют разрешение 10 мс. Getittimer и setitimer имеют разрешение 10 мс в соответствии с man-страницей.
Единственный способ сделать этот таймер, о котором я сейчас могу подумать, - это использовать clock_gettime с CLOCK_MONOTONIC в моем основном цикле - тест, если мс прошла, и, если да, увеличить счетчик (и затем проверить, должны ли срабатывать различные События ).
Есть ли лучший способ сделать это, чем постоянно запрашивать в основном цикле? Какое рекомендуемое решение для этого?
Я использую простой старый язык c
Обновление
Я использую ядро 2.6.26. Я знаю, что вы можете прерывать его на частоте 1 кГц, а функции POSIX timer_ * затем можно запрограммировать до 1 мс, но это кажется ненадежным, и я не хочу использовать это, потому что для некоторых может потребоваться новое ядро системы. Некоторое стандартное ядро, похоже, все еще настроено на 100 Гц. И я должен был бы обнаружить это. Приложение может быть запущено не на моей Системе:)
Я не могу спать в течение 1 мс, потому что могут быть сетевые события, на которые я должен реагировать.
Как я это решил
Поскольку это не так важно, я просто заявил, что глобальный таймер имеет разрешение 100 мс. Все события, использующие собственный таймер, должны быть установлены как минимум на 100 мс для истечения таймера. Мне было более или менее интересно, будет ли лучший путь, отсюда и вопрос.
Почему я принял ответ
Я думаю, что ответ из freespace лучше всего описывает, почему это невозможно без системы Linux реального времени.