Главная

Подскажите как?

Прошу прощения если вопрос наивный, но подскажите как в программе получить текущее время системы и переменной какого типа ее запомнить. Лучше с примером.

Re: Подскажите как?

include <time.h>

struct tm *dat; // структура tm описана в time.h
time_t tmp;
time(&tmp);
dat=localtime(&tmp);

Получаем:
dat–>tm_sec — секунды;
dat–>tm_min — минуты;
dat–>tm_hour — часы;
dat–>tm_mday — день месяца (с 1);
dat–>tm_mon — месяц (с 0);
dat–>tm_year — год–1900;
dat–>tm_wday — день недели;
dat–>tm_yday;
dat–>tm_isdst;
dat–>tm_gmtoff;
dat–>tm_zone — не использовал;

Зачем нужен вызов сначала одной, а потом другой функции получения времени, не помню (последний раз время делал по образцу с другой программы).

Re: Подскажите как?

time() возвращает кол–во секунд, прошедшее с 1 января 1970 года, а localtime() «расшифровывает» данное ей кол–во секунд в структуру tm.

Кстати, рекомендуется использовать tm* localtime_r(const time_t*, tm*), так как эта функция заполнит данную ей структуру tm, а не свою внутреннюю статическу переменную, что потенциально может быть опасно в многопоточной программе.

Re: Подскажите как?

т.е. time() возвращает целочисленную переменную типа int?

Re: Подскажите как?

time_t — это long, если бытьо точным…

Кстати, есть еще и родные Бишные функции: http://www.beclan.org/BeBook/The_Kernel_Kit/Time.html

Re: Подскажите как?

Вот с этими функциями я как раз и не разобрался доконца.

real_time_clock() похоже тоже самое что и time()

real_time_clock_usecs() тоже самое но в микросекундах

set_real_time_clock() — ?

system_time() — время с начала загрузки системы в микросекундах.

а вот как их использовать?

Re: Подскажите как?

set_real_time_clock() по идее переустановит системное время (именно то кол–во секунд с 01.01.1970). Ну а как использовать это уж зависит от того, что хочется получить… ;)

Например, можно использовать system_time() для вычисления текущего FPS отрисовки, для контроля времени внутри виртуального мира и т.д. Вообще, кол–во секунд (или микросекунд) однозначно определяют момент времени, так что как правило, например, в календаре достаточно хранить только кол–во секунд, а не структуру, содержащую год, месяц, день недели, час, минуту, и т.д. Кроме того, кол–во секунд очень удобно сравнивать между собой и производить с ними арифметические операции. Например:


uint32 now = real_time_clock();
ScheduleMyTask(now + 5 * 60); // сейчас + 5 минут

Re: Подскажите как?

Спасибо! Вроде стало понятно. Вообще надо это в WIKI добавить.

Отправить комментарий

Содержание этого поля является приватным и не предназначено к показу.
  • Адреса страниц и электронной почты автоматически преобразуются в ссылки.
  • Allowed HTML tags: <a> <em> <i> <img> <strong> <b> <cite> <code> <ul> <ol> <li> <dl> <dt> <dd>
  • Строки и параграфы переносятся автоматически.

Подробнее о форматировании

CAPTCHA
Введите перечисленные символы, чтобы мы убедились, что вы не робот. Не требуется для зарегистрированных пользователей.
2
q
M
d
v
r
Enter the code without spaces and pay attention to upper/lower case.