Ожидаемая продолжительность сна (1) - PullRequest
1 голос
/ 08 марта 2012

Какова ожидаемая продолжительность вызова для сна с одним в качестве аргумента? Это случайное время, которое не превышает 1 секунды? Это какое-то случайное время, которое составляет хотя бы одну секунду?

Сценарий:

  • Разработчик A пишет код, который выполняет некоторые шаги последовательно с устройством вывода. Код отправлен и А уходит.

  • Разработчику B рекомендуется из области, что шагам j и k требуется интервал в одну секунду между ними. Поэтому он вставляет вызов на sleep(1) между этими шагами. Код отправлен, и Разработчик B уходит.

  • Разработчик C задается вопросом, следует ли ожидать, что sleep(1) будет достаточно долго спать, или следует использовать метод с более высоким разрешением, чтобы обеспечить задержку по меньшей мере в 1000 миллисекунд.

Ответы [ 2 ]

2 голосов
/ 09 марта 2012

На моей man-странице написано:

unsigned int sleep(unsigned int seconds);

DESCRIPTION
   sleep()  makes  the  calling  thread  sleep  until seconds seconds have
   elapsed or a signal arrives which is not ignored.
...
RETURN VALUE
   Zero if the requested time has elapsed, or the number of  seconds  left
   to sleep, if the call was interrupted by a signal handler.

так что sleep заставляет поток спать, пока вы говорите, но сигнал пробуждает его. Я не вижу дальнейших гарантий.

если вам нужно лучшее, более точное время ожидания, то сон не достаточно хорош. Существует nanosleep и (звучит смешно, но это правда) select - это единственный способ посси-переносить сон в течение секунды (или с более высокой точностью), который я знаю.

2 голосов
/ 08 марта 2012

sleep() только гарантирует, что процесс будет находиться в спящем режиме как минимум в течение указанного времени, так что вы можете указать «какое-то случайное время, равное как минимум одной секунде».

Подобное поведение упоминается в man-страница для nanosleep:

nanosleep () приостанавливает выполнение вызывающего потока до тех пор, пока не истечет хотя бы время, указанное в * req ...

Вы также можете найти ответы на этот вопрос полезный.

...