tm.h - Man Page

Время и таймеры

Synopsis

#include <time.h>
#include 'bee2/defs.h'

Определения типов

typedef u32 tm_ticks_t
Число тактов таймера
typedef time_t tm_time_t
Время

Функции

tm_ticks_t tmTicks ()
Показания таймера
tm_ticks_t tmFreq ()
Частота таймера
size_t tmSpeed (size_t reps, tm_ticks_t ticks)
Скорость
tm_time_t tmTime ()
UNIX-время
tm_time_t tmTimeRound (tm_time_t t0, tm_time_t ts)
Округленное UNIX-время
bool_t tmDate (size_t *y, size_t *m, size_t *d)
Дата
bool_t tmDate2 (octet date[6])
Дата в формате YYMMDD.
bool_t tmDateIsValid (size_t y, size_t m, size_t d)
Корректная дата?
bool_t tmDateIsValid2 (const octet date[6])
Корректная дата в формате YYMMDD?

Подробное описание

Таймер

Функции tmFreq(), tmTicks() отвечают за работу с наиболее точным таймером среди доступных. Показания выдаются в виде значения типа tm_ticks_t.

Наиболее точным таймером на платформах x86, x64 является регистр RDTSC, который обновляется с частотой процессора.

Таймер определяется в следующей очередности (до первого найденного): -- на платформах x86, x64 использовать регистр RDTSC; -- в среде Windows использовать функции QueryPerformance[Counter|Frequency](); -- в среде Unix использовать функции clock_get[time|res](); -- использовать функцию clock() и константу CLOCK_PER_SEC (см. time.h).

Время

Системное время задается числом секунд, прошедших с полуночи 01 января 1970 года (1970-01-01T00:00:00Z в формате ISO 8601). Использованную шкалу времени прнято называть UNIX-время. Начало отсчета -- старт 'эры UNIX' (Unix Epoch).

Отметка времени представляется типом tm_time_t. Этот тип повторяет системный тип time_t и наследует его неопределенность по разрядности и знаковости.

Предупреждения

10 января 2004 счетчик секунд принял значение 2^30. 32-битовый счетчик исчерпает себя 19 января 2038 года.

Дата

Дата задается тройкой (год y, месяц m, день месяца d).

Месяцы нумеруются от 1 (январь) до 12 (декабрь). Дни месяца -- от 1 до 28, 29, 30 или 31.

Прим.

Даты, в которых y < 1583, считаются некорректными (григорианский календарь был введен в 1582 году).

Тройка кодируется либо тремя беззнаковыми целыми либо 6 октетами по схеме YYMMDD. В последнем случае каждый октет представляет один десятичный знак даты:

Пример: {0x02, 0x02, 0x0, 0x7, 0x2, 0x9}.

Дата определяется с привязкой к текущему часовому поясу.

Прим.

Даты в формате YYMMDD используются в CV-сертификатах (см. btok.h).

Функции

bool_t tmDate (size_t * y, size_t * m, size_t * d)

Определяются текущие (год y, месяц m, день месяца d). Каждый из указателей y, m, d может быть нулевым, и тогда соответствующее поле даты не возвращается.

Предусловие

Ненулевые указатели y, m, d корректны.

Возвращает

TRUE, если дата успешно определена, и FALSE в противном случае.

Аргументы

y год  
m месяц  
d день

bool_t tmDate2 (octet date[6])

Определяется текущая дата date в формате YYMMDD.

Предусловие

Указатель date корректен.

Возвращает

TRUE, если дата успешно определена, и FALSE в противном случае.

Аргументы

date дата

bool_t tmDateIsValid (size_t y, size_t m, size_t d)

Проверяется корректность даты (год y, месяц m, день месяца d).

Возвращает

Признак корректности.

Аргументы

y год  
m месяц  
d день

bool_t tmDateIsValid2 (const octet date[6])

Проверяется корректность даты date в формате YYMMDD.

Возвращает

Признак корректности.

Прим.

Проверяется в том числе корректность указателя date.

Аргументы

date дата

tm_ticks_t tmFreq ()

Возвращается число тактов, которое выполняет в секунду наиболее точный из доступных таймеров.

Предупреждения

Замер частоты может занять время (в пределах 0.1 секунды).

Возвращает

Число тактов в секунду или 0 в случае ошибки.

size_t tmSpeed (size_t reps, tm_ticks_t ticks)

По числу reps экспериментов за ticks тактов определяется число экспериментов, которое можно выполнить за 1 секунду.

Предупреждения

Расчеты ведутся в dword. Может быть потеря точности, связанная с переполнением.

Возвращает

Число экспериментов в секунду или SIZE_MAX в случае ошибки.

Аргументы

reps число экспериментов  
ticks число тактов

tm_ticks_t tmTicks ()

Возвращается число тактов, выполненных наиболее точным из доступных таймеров. Таймер начинает работу до первого вызова функции. Показания таймера монотонно увеличиваются вплоть до переполнения счетчика тактов.

Возвращает

Число тактов или 0 в случае ошибки.

tm_time_t tmTime ()

Возвращается число секунд, прошедших с момента 1970-01-01T00:00:00Z.

Возвращает

Число секунд или TIME_ERR в случае ошибки.

tm_time_t tmTimeRound (tm_time_t t0, tm_time_t ts)

Возвращается округленное UNIX-время (tmTime() - t0) / ts, где t0 --- базовая отметка времени (начало отсчета), ts -- шаг времени.

Возвращает

Округленное UNIX-время или TIME_ERR в случае ошибки.

Прим.

Ошибками считаются следующие ситуации: ts == 0, tmTime() < t0.

Процедура округления соответствует RFC 6238.

Аргументы

t0 начало отсчета  
ts шаг времени

Автор

Автоматически создано Doxygen для Библиотека Bee2 из исходного текста.

Info

Вт 23 Янв 2024 00:00:00 Библиотека Bee2