Книга: Программирование для Linux. Профессиональный подход
Листинг 8.8. (better_sleep.c) Высокоточная реализация функции sleep()
Листинг 8.8. (better_sleep.c) Высокоточная реализация функции sleep()
#include <errno.h>
#include <time.h>
int better_sleep(double sleep_time) {
struct timespec tv;
/* Заполнение структуры timespec на основании указанного числа
секунд. */
tv.tv_sec = (time_t)sleep_time;
/* добавление неучтенных выше наносекунд. */
tv.tv_nsec = (long)((sleep_time - tv.tv_sec) * 1e+9);
while (1) {
/* Пауза, длительность которой указана в переменной tv.
В случае прерывания по сигналу величина оставшегося
промежутка времени заносится обратно в переменную tv. */
int rval = nanosleep(&tv, &tv);
if (rval == 0)
/* пауза успешно окончена. */
return 0;
else if (errno == EINTR)
/* Прерывание по сигналу. Повторная попытка. */
continue;
else
/* Какая-то другая ошибка. */
return rval;
}
return 0;
}
- 9.4.1. Реализация графа в виде матрицы смежности
- Листинг 10.1. (simpleid.c) Отображение идентификаторов пользователя и группы
- Аргументы функции в Python
- 3. Функции
- Новые функции API для работы с Blob и массивами
- Реализация языка SQL
- Листинг 15.11. Код для загрузки файла с Web-сервера
- 9.2.1. Более строгая реализация стека
- Математические функции
- 9.2 Реализация массива ftAID на платформе Windows NT
- Размытые функции
- 7.3. Финансовые функции