Насколько неточной может быть функция uspp для cpp?
Я хочу измерить, насколько неточным может быть сон. Я имею в виду, если я напишу в своей программе usleep(5000), какое максимальное время будет спать?
заранее спасибо
2 ответа
Если у вас нет ядра RTOS, максимальное время - навсегда.
usleep
(или же nanosleep
или любой другой режим ожидания) гарантирует ожидание, по крайней мере, столько времени, сколько вы скажете, с округлением до степени детализации системного таймера, если только сигнал не перехвачен. Вы знаете, произошел ли сигнал от возвращаемого значения.
По истечении этого времени ваш поток будет готов к запуску и, в конце концов, снова будет запущен по усмотрению планировщика. В зависимости от тысячи факторов, которые вы не знаете, это может быть следующая наносекунда или через 5 минут, или никогда.
usleep
в современных системах Linux использует nanosleep
системный вызов, поэтому он не страдает от проблем, связанных с сигналом более старых реализаций. С другой стороны, это все еще зависит от разрешения таймера вашей системы, которое зависит от ядра и оборудования.
Тем не менее, из usleep
страница справочника:
POSIX.1-2001 объявляет эту функцию устаревшей; вместо этого используйте nanosleep(2). POSIX.1-2008 удаляет спецификацию usleep().