Событие в момент времени по часам.

Вопросы программирования и использования среды Lazarus.

Модератор: Модераторы

Событие в момент времени по часам.

Сообщение GAMER » 16.10.2014 10:22:03

Есть ли готовая возможность или легкий (в смысле для нагрузки проца и памяти) способ, чтобы поймать событие в момент времени (например 13:42:34)?
Дергать каждую секунду таймер и проверять системное время, как-то не красиво.
Аватара пользователя
GAMER
энтузиаст
 
Сообщения: 627
Зарегистрирован: 06.08.2008 13:41:07
Откуда: Ужгород-Днепр, Украина

Re: Событие в момент времени по часам.

Сообщение kosteek » 16.10.2014 11:48:26

Код: Выделить всё
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;
kosteek
постоялец
 
Сообщения: 203
Зарегистрирован: 24.07.2008 14:57:09
Откуда: Украина, г.Славянск

Re: Событие в момент времени по часам.

Сообщение GAMER » 16.10.2014 13:49:04

Спасибо.
Я правильно понял, что:
1. Создаеться форма, интервал:=0, чтобы сразу отрабатало TForm1.Timer1Timer?
2. Там просчитывается, сколько времени осталось до события и устанавливаеться нужный интервал?
3. Через правильно расчитаный интервал происходит событие и интервал менячет свое значение на время до следующего события (грубо 24 часа)?
Аватара пользователя
GAMER
энтузиаст
 
Сообщения: 627
Зарегистрирован: 06.08.2008 13:41:07
Откуда: Ужгород-Днепр, Украина

Re: Событие в момент времени по часам.

Сообщение kosteek » 16.10.2014 18:34:05

Все верно.
kosteek
постоялец
 
Сообщения: 203
Зарегистрирован: 24.07.2008 14:57:09
Откуда: Украина, г.Славянск

Re: Событие в момент времени по часам.

Сообщение GAMER » 06.11.2014 18:20:55

60*strtoint(FormatDateTime('mm',t

Думаю, что здесь должно быть nn, а не mm.
Аватара пользователя
GAMER
энтузиаст
 
Сообщения: 627
Зарегистрирован: 06.08.2008 13:41:07
Откуда: Ужгород-Днепр, Украина

Re: Событие в момент времени по часам.

Сообщение kosteek » 06.11.2014 19:38:41

Верно, ошибся.
Но по ссылке ниже, автор возможно сам ошибается. Нужно проверить.
http://www.delphibasics.ru/FormatDateTime.php
kosteek
постоялец
 
Сообщения: 203
Зарегистрирован: 24.07.2008 14:57:09
Откуда: Украина, г.Славянск

Re: Событие в момент времени по часам.

Сообщение Sharfik » 06.11.2014 21:58:17

По моему опыту нет ничего плохого в установке интервала на минуту. В делфи он больше не выставлялся. Нагрузка на проц. мизерная на самом деле.
Аватара пользователя
Sharfik
энтузиаст
 
Сообщения: 809
Зарегистрирован: 20.07.2013 01:04:30

Re: Событие в момент времени по часам.

Сообщение GAMER » 06.11.2014 23:31:05

2Sharfik. Если вы о sleep(), то этот вариант в даном случае мне не подходит. А вот приведенный пример в самый раз, только я его подправил немного под себя.
Аватара пользователя
GAMER
энтузиаст
 
Сообщения: 627
Зарегистрирован: 06.08.2008 13:41:07
Откуда: Ужгород-Днепр, Украина

Re: Событие в момент времени по часам.

Сообщение Sharfik » 07.11.2014 01:54:30

GAMER писал(а):2Sharfik. Если вы о sleep(), то этот вариант в даном случае мне не подходит. А вот приведенный пример в самый раз, только я его подправил немного под себя.

Я о таймере.
Аватара пользователя
Sharfik
энтузиаст
 
Сообщения: 809
Зарегистрирован: 20.07.2013 01:04:30

Re: Событие в момент времени по часам.

Сообщение Alex2013 » 08.11.2014 19:46:19

Ну чуть по фантазировав Sleep или похожую функцию можно "повесть" на отдельный поток ... (Хотя это понятное дело "оверкил" хотя многое зависит от реализации задержки... )
А с таймером можно просто изредка проверь системное время и при приближении "времени-Ч" делать это чаще . (ИМХО надежнее чем ожидать вычисляемое количество интервалов - мало ли что там процессор сожрет, а часы от него независимы )
Alex2013
долгожитель
 
Сообщения: 3145
Зарегистрирован: 03.04.2013 11:59:44

Re: Событие в момент времени по часам.

Сообщение GAMER » 08.11.2014 21:38:59

У меня в одном проекте (разные задачи) в одном случае лучше sleep, а в другом таймер.
Например, идет выборка с БД. Может быть случай, что обработка будет идти дольше, чем интервал таймера. И обрабатываются повторно те записи, которые обрабатываются еще в первой вызове.
Кстати, нужно будет проверить поведение таймера, если тело таймера выполняется дольше, чем интервал.
Аватара пользователя
GAMER
энтузиаст
 
Сообщения: 627
Зарегистрирован: 06.08.2008 13:41:07
Откуда: Ужгород-Днепр, Украина

Re: Событие в момент времени по часам.

Сообщение alexs » 09.11.2014 20:28:42

GAMER писал(а):Кстати, нужно будет проверить поведение таймера, если тело таймера выполняется дольше, чем интервал.

Будет ждать звершения. Тик пропустит.
Аватара пользователя
alexs
долгожитель
 
Сообщения: 4064
Зарегистрирован: 15.05.2005 23:17:07
Откуда: г.Ставрополь

Re: Событие в момент времени по часам.

Сообщение GAMER » 10.11.2014 11:30:58

Спасибо.
Аватара пользователя
GAMER
энтузиаст
 
Сообщения: 627
Зарегистрирован: 06.08.2008 13:41:07
Откуда: Ужгород-Днепр, Украина


Вернуться в Lazarus

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 254

Рейтинг@Mail.ru