Мне нужен таймер с разрешением 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 реального времени.