Книга: Программирование для Linux. Профессиональный подход
8.10. Функция nanosleep(): высокоточная пауза
8.10. Функция nanosleep(): высокоточная пауза
Функция nanosleep()
является более точной версией стандартной функции sleep()
, принимая указатель на структуру типа timespec
, где время задается с точностью до наносекунды, а не секунды. Правда, особенности работы ОС Linux таковы, что реальная точность оказывается равной 10 мс, но это все равно выше, чем в функции sleep()
. Функцию nanosleep()
можно использовать в приложениях, где требуется запускать различные операции с короткими интервалами между ними.
В структуре timespec
имеются два поля:
? tv_sес
— целое число секунд;
? tv_nsec
— дополнительное число миллисекунд (должно быть меньше, чем 109).
Работа функции nanosleep()
, как и функции sleep()
, прерывается при получении сигнала. При этом функция возвращает значение -1, а в переменную errno записывается код EINTR
. Но у функции nanosleep()
есть важное преимущество. Она принимает дополнительный аргумент — еще один указатель на структуру timespec
, в которую (если указатель не равен NULL
) заносится величина оставшегося интервала времени (т.е. разница между запрашиваемым и прошедшим промежутками времени). Благодаря этому можно легко возобновлять прерванные операции ожидания.
В листинге 8.8 показана альтернативная реализация функции sleep()
. В отличие от стандартного системного вызова эта функция может принимать дробное число секунд и возобновлять операцию ожидания в случае прерывания по сигналу.
- 2.1.3. Функция getopt_long()
- Группировка по встроенным функциям и UDF
- 19.1.1. Функция jQuery()
- Функция strcmp( )
- Управление функциями узла
- Функция программного обеспечения
- 3.2. Ключи типа key_t и функция ftok
- 9.10. Функция sctp_recvmsg
- Функция document
- Функция generate-id
- Функция console.log
- 9.8. Функция sctp_freeladdrs