_time_ Работа с астрономическим временем. Отсчёт интервалов времени. (Мини-учебник с ejudge = Чернокнижка), страница 2
Описание файла
Файл "_time_ Работа с астрономическим временем. Отсчёт интервалов времени." внутри архива находится в папке "Мини-учебник с ejudge = Чернокнижка". PDF-файл из архива "Мини-учебник с ejudge = Чернокнижка", который расположен в категории "". Всё это находится в предмете "практика расчётов на пэвм" из 3 семестр, которые можно найти в файловом архиве МГУ им. Ломоносова. Не смотря на прямую связь этого архива с МГУ им. Ломоносова, его также можно найти и в других разделах. .
Просмотр PDF-файла онлайн
Текст 2 страницы из PDF
Это значит, что система не может приостановить выполнение пользовательского процесса на время, меньшеечем 1/HZ (на i386 это — 10 миллисекунд). Время выравнивается в сторону увеличения доближайшего значения, кратного 1/HZ. Соответственно, оставшееся время выравнивается всторону увеличения до значения, кратного 1/HZ.Если процесс имеет приоритет реального времени (политика планирования SCHED_FIFOили SCHED_RR, тогда паузы на интервал времени, меньший 1/HZ могут выполняться с помощью циклов задержки.Функции приостановки выполнения программы должны использоваться, когда программа постоянно опрашивает какой-нибудь объект (например, каталог) и отслеживает изменения в нём. Например, программа, которая отслеживает появление в каталоге нового файла исразу же переносит этот файл в другой каталог.#include#include#include#include#include#include<stdio.h><stdlib.h><string.h><unistd.h><time.h><dirent.h>int main(int argc, char **argv){DIR*dd;struct dirent*de;struct timespec ts;charin_path[PATH_MAX+1];charout_path[PATH_MAX+1];if (argc != 3) {fprintf(stderr, "too few arguments\n");exit(1);}6while (1) {if (!(dd = opendir(argv[1]))) {perror("opendir");exit(1);}while ((de = readdir(dd))) {if (strcmp(de->d_name, ".") && strcmp(de->d_name, ".."))break;}if (!de) {closedir(dd);ts.tv_sec = 0;ts.tv_nsec = 1;nanosleep(&ts, NULL);} else {strcpy(in_path, argv[1]);strcat(in_path, "/");strcat(in_path, de->d_name);strcpy(out_path, argv[2]);strcat(out_path, "/");strcat(out_path, de->d_name);if (rename(in_path, out_path) < 0) {perror("rename");exit(1);}closedir(dd);}}return 0;}Если бы вызов nanosleep в строке 34 отсутствовал, программа бы постоянно опрашивала заданный каталог, бесполезно трача процессорное время.
Вызов nanosleep приостановит выполнение программы до следующего кванта времени, позволив нормально работатьдругим процессам.7.