Насколько неточной функцией usp может быть неточность в cpp? - PullRequest
1 голос
/ 23 января 2012

Я хочу измерить, насколько неточным может быть сон. Я имею в виду, если я напишу в своей программе USleep (5000) какое максимальное время будет спать?

заранее спасибо

Ответы [ 2 ]

3 голосов
/ 23 января 2012

Если у вас нет ядра RTOS, максимальное время - навсегда.

usleep (или nanosleep или любой другой режим ожидания) гарантирует ожидание, по крайней мере, столько, сколько вы скажете, с округлением до гранулярности системного таймера, , если только сигнал не пойман . Вы знаете, произошел ли сигнал от возвращаемого значения.

По истечении этого времени ваш поток будет готов к запуску, и в конечном итоге он снова запустится, по усмотрению планировщика. В зависимости от тысячи факторов, которые вы не знаете, это может быть следующая наносекунда или через 5 минут, или никогда.

2 голосов
/ 23 января 2012

usleep в современных системах Linux использует системный вызов nanosleep, поэтому он не страдает от проблем, связанных с сигналом более старых реализаций. С другой стороны, это все еще зависит от разрешения таймера вашей системы, которое зависит от ядра и оборудования.

Тем не менее, со страницы руководства usleep:

POSIX.1-2001 объявляет эту функцию устаревшей; используйте вместо этого nanosleep (2). POSIX.1-2008 удаляет спецификацию usleep ().

...