Форум: "Основная";
Текущий архив: 2004.02.25;
Скачать: [xml.tar.bz2];
ВнизСоздание таймера на 48 часов Найти похожие ветки
← →
turonix (2004-02-11 11:03) [0]Всем привет. Столкнулся тут с проблемой: как создать таймер на 48 часов, причем надо, чтобы он каждую минуту показывал сколько времени осталось. Отловить момент когда время заканчится проблем нет, но вот как расчитывать сколько времени осталось ума не приложу. В файл ничего записывать нельзя (у проги не будет доступа на запись). Есть конечно БД, но обращение к ней займет много времени, так что это крайний вариант. Надо расчитывать оставшиеся минуты, отталкиваясь от текущей даты/времени... Как будет выглядить алгоритм?
← →
Sandman25 (2004-02-11 11:08) [1]Делаете таймер на минуту, в обработчике проверяете, а не прошло ли 48 часов с момента первого запуска.
← →
ALEIIIKA (2004-02-11 11:12) [2]Время начала отсчета :
T_otch : Double;
Текущее время:Now
Осталось:T_eval
// OnCreate
begin
T_otch := Now + (1/24)*48 // 48 часов;
end;
//TTimer
begin
T_eval := T_otch - Now;
end;
← →
Amoeba (2004-02-11 11:15) [3]Проще пареной репы, если хорошо подумать.
Создаешь таймер с интервалом в 1 мин. Заводишь счетчик его срабатываний и при запуске таймера его обнуляешь. В событии OnTimer (вызывается с интервалом 1 мин.) увеличиваешь счетчик на 1. Вычисляешь разницу между 48*60 и значением счетчика и отображаешь ее. Когда значение счетчика станет равным 48*60, останавливаешь таймер.
← →
turonix (2004-02-11 11:38) [4]Все это конечно здорого, только вот прога может отключаться, но на отсчет времени это повлиять не должно. По-сути я имею только дату/время насало отсчета. Все. Счетчик я сохранить не смогу. Некуда.
← →
Sandman25 (2004-02-11 11:41) [5][4] turonix © (11.02.04 11:38)
Чем не устраивает [1]? Время срабатывания записываете куда-нибудь перед промежуточным отключением.
← →
turonix (2004-02-11 11:45) [6]Sandman25 © Делаете таймер на минуту, в обработчике проверяете, а не прошло ли 48 часов с момента первого запуска.
Так как раз с этим проблем нет. Проблемы с тем, чтобы программа отображала сколько времени осталось. Притом в часах и минутах. Как это расчитывать, опираясь на текущую дату/время?
← →
mfender (2004-02-11 11:46) [7]К чему такие ограничения на запись? Прячемся?
← →
Sandman25 (2004-02-11 11:47) [8][6] turonix © (11.02.04 11:45)
MinutesBetween
← →
Erik (2004-02-11 11:50) [9]Если предположить, что машина небудет перегружатся(что неизвестно), то можно воспользоватся структоруй GlobalAtom. Туда можно сохранять счетчик. А для подстраховки раз в 10 мин записывать в базу данных. При старте проверять и востанавливать сначала из глобольной структуры а после из базы.
← →
mfender (2004-02-11 11:51) [10]Если надо считать от первого запуска, то в реестре, например, сохраняем всего одну запись об времени этого первого запуска. Далее просто ищем разницу между текущим временем и временем первого запуска.
Если надо считать 48 часов совокупной работы, значит считаем время, например в секундах или милисекундах и при каждом отключении записываем в реестр результат. Как только 48 часов - зуммммммм....
← →
KSergey (2004-02-11 11:52) [11]> [3] Amoeba © (11.02.04 11:15)
> Создаешь таймер с интервалом в 1 мин. Заводишь счетчик его
> срабатываний и при запуске таймера его обнуляешь. В событии
> OnTimer (вызывается с интервалом 1 мин.) увеличиваешь счетчик
> на 1. Вычисляешь разницу между 48*60 и значением счетчика
> и отображаешь ее. Когда значение счетчика станет равным
> 48*60, останавливаешь таймер.
Неверное решение!
В общем случае не факт, что раз в минуту удастся получать сообщения, таким образом возможен пропуск минут.
← →
Anatoly Podgoretsky (2004-02-11 12:07) [12]turonix © (11.02.04 11:03)
Неверное представление о таймера, они отчитывают интервал и более ничего.
← →
turonix (2004-02-11 12:08) [13]Sandman25 © (11.02.04 11:47) [8]
MinutesBetween
Это похоже то что мне нужно! СПАСИБО! А как в это функци найти количество минут прошедших с 10.02.04 (10:00) до 11.02.04 (11.00)?
← →
turonix (2004-02-11 12:11) [14]А то в Help нету не одного примера :( А там первое значение какая-то константа...
← →
Sandman25 (2004-02-11 12:15) [15]StrToDateTime
← →
Anatoly Podgoretsky (2004-02-11 12:16) [16]turonix © (11.02.04 12:08) [13]
Ну так используй вычитание и умножение на константу
← →
Sandman25 (2004-02-11 12:18) [17]Кстати, вместо MinutesBetween лучше применить Round(MinuteSpan(...))
Страницы: 1 вся ветка
Форум: "Основная";
Текущий архив: 2004.02.25;
Скачать: [xml.tar.bz2];
Память: 0.48 MB
Время: 0.03 c