Событие в момент времени по часам.
Модератор: Модераторы
- GAMER
- энтузиаст
- Сообщения: 627
- Зарегистрирован: 06.08.2008 13:41:07
- Откуда: Ужгород-Днепр, Украина
- Контактная информация:
Событие в момент времени по часам.
Есть ли готовая возможность или легкий (в смысле для нагрузки проца и памяти) способ, чтобы поймать событие в момент времени (например 13:42:34)?
Дергать каждую секунду таймер и проверять системное время, как-то не красиво.
Дергать каждую секунду таймер и проверять системное время, как-то не красиво.
Код: Выделить всё
function TimeToMillisec(t:TDateTime):integer;
begin
result:=1000*(strtoint(FormatDateTime('ss',t))+(60*strtoint(FormatDateTime('mm',t)))+(60*60*strtoint(FormatDateTime('hh',t))));
end;
function TimerInterval(start_time:string):integer;
begin
result:=TimeToMillisec(StrToTime(start_time))-TimeToMillisec(Time);
if TimeToMillisec(Time) >= TimeToMillisec(StrToTime(start_time)) then result:= (60*60*60*1000)+(TimeToMillisec(StrToTime(start_time))-TimeToMillisec(Time));
end;
procedure TForm1.FormCreate(Sender: TObject);
begin
Timer1.Interval:=0;
Timer1.Enabled:=True;
end;
procedure TForm1.Timer1Timer(Sender: TObject);
var start_time:string = '10:48:53';
begin
Timer1.Interval:=TimerInterval(start_time);
Timer1.Enabled:=True;
end;- GAMER
- энтузиаст
- Сообщения: 627
- Зарегистрирован: 06.08.2008 13:41:07
- Откуда: Ужгород-Днепр, Украина
- Контактная информация:
Спасибо.
Я правильно понял, что:
1. Создаеться форма, интервал:=0, чтобы сразу отрабатало TForm1.Timer1Timer?
2. Там просчитывается, сколько времени осталось до события и устанавливаеться нужный интервал?
3. Через правильно расчитаный интервал происходит событие и интервал менячет свое значение на время до следующего события (грубо 24 часа)?
Я правильно понял, что:
1. Создаеться форма, интервал:=0, чтобы сразу отрабатало TForm1.Timer1Timer?
2. Там просчитывается, сколько времени осталось до события и устанавливаеться нужный интервал?
3. Через правильно расчитаный интервал происходит событие и интервал менячет свое значение на время до следующего события (грубо 24 часа)?
Все верно.
Верно, ошибся.
Но по ссылке ниже, автор возможно сам ошибается. Нужно проверить.
http://www.delphibasics.ru/FormatDateTime.php
Но по ссылке ниже, автор возможно сам ошибается. Нужно проверить.
http://www.delphibasics.ru/FormatDateTime.php
По моему опыту нет ничего плохого в установке интервала на минуту. В делфи он больше не выставлялся. Нагрузка на проц. мизерная на самом деле.
GAMER писал(а):2Sharfik. Если вы о sleep(), то этот вариант в даном случае мне не подходит. А вот приведенный пример в самый раз, только я его подправил немного под себя.
Я о таймере.
Ну чуть по фантазировав Sleep или похожую функцию можно "повесть" на отдельный поток ... (Хотя это понятное дело "оверкил" хотя многое зависит от реализации задержки... )
А с таймером можно просто изредка проверь системное время и при приближении "времени-Ч" делать это чаще . (ИМХО надежнее чем ожидать вычисляемое количество интервалов - мало ли что там процессор сожрет, а часы от него независимы )
А с таймером можно просто изредка проверь системное время и при приближении "времени-Ч" делать это чаще . (ИМХО надежнее чем ожидать вычисляемое количество интервалов - мало ли что там процессор сожрет, а часы от него независимы )
- GAMER
- энтузиаст
- Сообщения: 627
- Зарегистрирован: 06.08.2008 13:41:07
- Откуда: Ужгород-Днепр, Украина
- Контактная информация:
У меня в одном проекте (разные задачи) в одном случае лучше sleep, а в другом таймер.
Например, идет выборка с БД. Может быть случай, что обработка будет идти дольше, чем интервал таймера. И обрабатываются повторно те записи, которые обрабатываются еще в первой вызове.
Кстати, нужно будет проверить поведение таймера, если тело таймера выполняется дольше, чем интервал.
Например, идет выборка с БД. Может быть случай, что обработка будет идти дольше, чем интервал таймера. И обрабатываются повторно те записи, которые обрабатываются еще в первой вызове.
Кстати, нужно будет проверить поведение таймера, если тело таймера выполняется дольше, чем интервал.
