Заглавная страница Избранные статьи Случайная статья Познавательные статьи Новые добавления Обратная связь FAQ Написать работу КАТЕГОРИИ: ТОП 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; просмотров: 184; Нарушение авторского права страницы; Мы поможем в написании вашей работы! infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 216.73.217.128 (0.006 с.) |