Посчитать время

Feb 24, 2007 6 Replies

Hello All!



Вопрос чисто софтварный. Есть 100 датчиков. Исходное состояние - пассивное. Как только датчик переходит в активное состояние нужно начать отсчет времени активности. Максимальное количество дней активности скажем 255. Точность измерения - 1сек. Думаю так:



  1. Есть глобальный таймер который считает с инкрементом 1сек при включении девайса.
  2. Для каждого датчика выделяю переменную в которую при срабатывании датчика просто переписываю текущее время из глоб. таймера.
  3. Когда нужно узнать время активности - от текущего времени отнимаю то что в переменной для каждого датчика.

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



Тупо в лоб по байту на dd.hh:mm:ss как-то криво в части вычислений.



Roman


Hallo Roman!

RG> Вопрос: какой использовать формат для хранения времени и собственно RG> процедуру вычисления разности. RG> Тупо в лоб по байту на dd.hh:mm:ss как-то криво в части вычислений. unixtime Исходников в инете навалом.

WBR Yaroslav A. Komarov

Sat Feb 24 2007 21:18, Roman Gorbunov wrote to All:

RG> Hello All!

RG> Вопрос чисто софтварный. RG> Есть 100 датчиков. Исходное состояние - пассивное. Как только датчик RG> переходит в активное состояние нужно начать отсчет времени активности. RG> Максимальное количество дней активности скажем 255. Точность измерения - RG> 1сек. RG> Думаю так: RG> 1. Есть глобальный таймер который считает с инкрементом 1сек при RG> включении девайса. RG> 2. Для каждого датчика выделяю переменную в которую при срабатывании RG> датчика просто переписываю текущее время из глоб. таймера. RG> 3. Когда нужно узнать время активности - от текущего времени отнимаю то RG> что в переменной для каждого датчика.

RG> Вопрос: какой использовать формат для хранения времени и собственно RG> процедуру вычисления разности.

RG> Тупо в лоб по байту на dd.hh:mm:ss как-то криво в части вычислений.

man rtfm time(), difftime();

SY, EK

Привет Roman!

24 Feb 07 21:18, Roman Gorbunov писал All:

RG> 1. Есть глобальный таймер который считает с инкрементом 1сек при RG> включении девайса.

RG> Вопрос: какой использовать формат для хранения времени

Hе формат, а тип. time_t. А формат тебя, по идее, волновать не должен.

RG> и собственно процедуру вычисления разности.

time_t delta = current - start;

RG> Тупо в лоб по байту на dd.hh:mm:ss как-то криво в части вычислений.

Противоречит п. 1, где мы договорились иметь счетчик _секунд_ и ничего больше.

Всего наилучшего, [Team PCAD 2000] Алексей М. ... G8: иногда лучше дирижировать, чем говорить.

Hello, Alex! You wrote to Roman Gorbunov on Sun, 25 Feb 2007 04:33:12 +0300:

RG>> Вопрос: какой использовать формат для хранения времени

AM> Hе формат, а тип. time_t. А формат тебя, по идее, волновать не AM> должен.

RG>> и собственно процедуру вычисления разности. AM> time_t delta = current - start;

Не учи людей плохому. Если уж используется time_t, то лучше пользоваться difftime() для вычисления разности.

WBR, AVB

Hello Roman!

24 Feb 07 21:18, you wrote to All:

RG> Вопрос: какой использовать формат для хранения времени и собственно RG> процедуру вычисления разности. Юниксоиды давно решили этот вопрос в пользу целого к-ва секунд от эпохи. Число дней вычисляется как остаток от деления на 86400.

RG> Тупо в лоб по байту на dd.hh:mm:ss как-то криво в части вычислений.

Четыре деления с остатком не затруднят даже раз в секунду.

Anatoly

Привет Alexey!

25 Feb 07 11:00, Alexey V Bugrov писал Alex Mogilnikov:

RG>>> и собственно процедуру вычисления разности. AM>> time_t delta = current - start;

AB> Hе учи людей плохому. Если уж используется time_t, то лучше AB> пользоваться difftime() для вычисления разности.

Hе понимаю, чем плохо вычисление разности как целого без преобразования его в формат плавающей точки. При том, что не любое целое вообще представимо типом double. При том, что ни ctime(), ни gmtime(), которые могут понадобиться для вывода результата в человеко-понятном виде, принимают именно time_t, а не double. Что потом с этим double делать, кроме последующего обратного преобразования в time_t? Я вижу в использовании difftime() только потерю точности при округлении...

Всего наилучшего, [Team PCAD 2000] Алексей М. ... Владею дыроколом на уровне пользователя.

Join the Discussion

Have something to add? Share your thoughts — no account required.

Didn't find your answer?

Ask the community — no account required