Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 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.031 c
1-79872
ЧимбаБумба
2004-02-13 20:38
2004.02.25
ShellListView


1-79899
Qwer
2004-02-10 09:30
2004.02.25
Совместимость


1-79894
Vag
2004-02-13 22:10
2004.02.25
Не закрывабшася программа?


6-80068
Сетевик
2003-12-18 12:17
2004.02.25
Никто низнает как сделать авторизацию на подключение к idTcpserve


1-79967
Batoon
2004-02-14 12:10
2004.02.25
Проблема с компонентом





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский