Заглавная страница Избранные статьи Случайная статья Познавательные статьи Новые добавления Обратная связь КАТЕГОРИИ: АрхеологияБиология Генетика География Информатика История Логика Маркетинг Математика Менеджмент Механика Педагогика Религия Социология Технологии Физика Философия Финансы Химия Экология ТОП 10 на сайте Приготовление дезинфицирующих растворов различной концентрацииТехника нижней прямой подачи мяча. Франко-прусская война (причины и последствия) Организация работы процедурного кабинета Смысловое и механическое запоминание, их место и роль в усвоении знаний Коммуникативные барьеры и пути их преодоления Обработка изделий медицинского назначения многократного применения Образцы текста публицистического стиля Четыре типа изменения баланса Задачи с ответами для Всероссийской олимпиады по праву Мы поможем в написании ваших работ! ЗНАЕТЕ ЛИ ВЫ?
Влияние общества на человека
Приготовление дезинфицирующих растворов различной концентрации Практические работы по географии для 6 класса Организация работы процедурного кабинета Изменения в неживой природе осенью Уборка процедурного кабинета Сольфеджио. Все правила по сольфеджио Балочные системы. Определение реакций опор и моментов защемления |
Одновременная работа с датой и временем
Текущее время можно получить и более замысловатым путем. Довольно обыденным является представление времени в виде нескольких компонент - номера месяца, дня месяца и недели и так далее. Для такого представления существует специальная подробная структура - tm, описанная в том же hеаdеr-файле <time.h>. Две функции struct tm *gmtime(long *timeptr); struct tm *localtime(long *timeptr); заполняют эту структуру. Первая из них делает это для Гринвичского меридиана, а вторая, как следует из названия, для местного часового пояса. Функция long mktime(struct tm *timeptr); производит обратное действие - преобразует структуру tm в количество секунд после эпохи до момента, записанного в структуре. Одновременно она устанавливает день недели. При неправильной дате или времени возвращает -1. Для некоторых неправильных дат mktime пытается подправить эту дату в самой структуре tm и не возвращает признак ошибки -1. Функция char *asctime(struct tm *timeptr); преобразует структуру tm в строку, эквивалентную возвращаемой функцией ctime().
Представление текущего времени в строку
Удобному представлению времени служит еще одна функция _strtime() char *_strtime(char *time); Функция _strtime() копирует текущее время в буфер, на который указывает аргумент tiтe, по формату "hh:mm:ss", где hh - две цифры, представляющие час в 24-часовой записи, mm - две цифры, представляющие минуты, а ss - две цифры, соответствующие секундам. Буфер должен быть выделен заранее и его длина должна составлять, по крайней мере, девять байт.
Работа с тиками
Функция clock() сообщает вызывающей программе процессорное время, затраченное с момента начала исполнения этой программы. clock_t clock(void); Функция может быть использована для определения временного интервала между двумя событиями. Для перевода количества тиков в секунды необходимо воспользоваться делителем CLK_TCK.
Изменение даты и времени модификации файла
Функция utime() изменяет дату и время модификации файла. int utime(char *pathname, struct utimebuf *timeptr); Структура utimbuf объявлена в файле <sys\utime.h> struct utimbuf { time_t actime; /*время доступа к файлу*/ time_t modtime; /*время последней модификации файла*/ }; Поскольку файловая система DOS поддерживает только время модификации файла, функция utime поле actime игнорирует. Если вместо адреса этой структуры функции utiтe() передается NULL, в качестве времени модификации используется текущее системное время. Файл должен иметь разрешение на запись. Код возврата: О при успешном изменении времени модификации файла и -1 при ошибке, определяемой с помощью переменной errno:
EACCES Pathname is directory ог read-only file EMFILE Тоо many ореn files. ENOENT File or path name not found
Работа с системными часами
Вернемся опять к системным часам. Мы не будем вдаваться в подробное рассмотрение устройства таймера, отметим, что он вырабатывает системное прерывание INT 8Н, которое называется "тиком". Тик производится примерно 18,2 раза в секунду, то есть примерно каждые 55 миллисекунд (частота осциллятора системных часов - 1,19318 МГц, деленная на 65536). Пользуясь этим, мы можем производить необходимые машинно-независимые задержки времени, например для генерации звуков. Количество тиков (происшедших с последней полуночи) с помощью прерывания INT 1АН даст нам функция _bios_tiтeofday(). С ее помощью можно также установить новое число тиков. Если с момента последнего чтения или установления тиков миновала полночь, _bios_tiтeofday() возвращает 1, в противном случае - 0. При переходе через полночь необходимо прибавить к имеющимся тикам их количество в полных сутках - 1573040 (или 0x01800B0L). unsigned _bios_timeofday(unsigntd service, long *timeval); Переменная timeval указывает на количество тиков. Параметр service равен 0 при получении счетчика тиков и 1 при установлении нового количества тиков. Текст _blos_tiтeofday() выглядит, вероятно, таким образом: unsigned _bios_timeofday(unsigntd service, long *timeval) { union REGS inregs, outregs; inregs.h.ah = service; if(service) { inregs.x.cx = *timeval >> 0x10; /*старший байт*/ inregs.x.dx = *timeval; /*младший байт*/ } int86(0x1A, &inregs, &outregs); if(!service) *timeval = outregs.x.dx + (outregs.x.cx << 0x10); return outregs.h.al; } Отметим, что для перевода тиков в секунды необходим множитель 1l93180L/65536, обратный частоте генерации тиков. Итого в минуте 1092 тиков, а в часе - 65 543.
|
|||||
Последнее изменение этой страницы: 2020-03-14; просмотров: 114; Нарушение авторского права страницы; Мы поможем в написании вашей работы! infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 18.217.187.19 (0.007 с.) |