Вниз
Скачать: CL | DM;

Помогите с переходом даты   Найти похожие ветки 

 
cher_gvf ©   (2002-09-18 17:10) [0]

Допустим,мне нужно запускать процесс в период с 22:35 до 2:10 с частотой 1 раз в 2 минуты.Как мне контролировать переход даты ночью если мне нужно отображать полную дату запуска?
Вот как я пытаюсь:

N:=0; //счетчик для итераций
if (Time < sc.script_finish) then
if (Time > sc.script_start) then // старт уже был СЕГОДНЯ
while (Time-(sc.script_start+N*sc.script_rate)) >= sc.script_rate do Inc(N)
else
if (Time < sc.script_start) then // старт скана был ВЧЕРА
begin
while (Time+1+(1-sc.script_start)) - (sc.script_start+N*sc.script_rate) >= sc.script_rate do Inc(N); // полагая что 24 часа =1.0
end;

// 1. Без учета перехода даты
if ((sc.script_start < sc.script_finish) and ((sc.script_start+(N+1)*sc.script_rate) <= sc.script_finish))
then // для уже не"сегодняшних" сканов
begin
if ((sc.script_start+(N+1)*sc.script_rate) <= next_time)
then next_time:=(sc.script_start+(N+1)*sc.script_rate); //время след.запуска
end;

// 2. С учетом перехода даты
if (sc.script_start > sc.script_finish) then
begin
if ((sc.script_start+(N+1)*sc.script_rate) > next_time)
then next_date := IncDay(next_date,1);
next_time:=(sc.script_start+(N+1)*sc.script_rate);
end;

помогите,плиз, нужно очень


 
Канадин Владимир   (2002-09-18 17:29) [1]

Надо использовать TDateTime(это Double, в целой части которого содержится день, в дробной - время). Перед стартом цикла задаешь время старта ControlTime, вычисляешь интервал времени между событиями Delta и в процедуре таймера пишешь
Timer1Timer(Sender : TObject);
begin
if now>ControlTime then begin
ControlTime:=ControlTime+Delta;
Необходимые действия;
end;
end;


 
Separator ©   (2002-09-18 21:10) [2]

а не проще так:

var
DateNow: TDateTime;
procedure TForm1.Form1Activate(Sender: TObject);
begin
...
//Запускаем процесс
DateNow:= Now; //Полна дата момента запуска
...
with Timer1 do
begin
Interval:= 120000;
Enabled:= true
end
end;

procedure TForm1.Timer1Timer(Sender: TObject);
begin
Timer1.Enabled:= false;
...
//Запускаем процесс
DateNow:= Now; //Полна дата момента запуска
...
with Timer1 do
begin
Interval:= 120000;
Enabled:= true
end
end;



Страницы: 1 вся ветка

Скачать: CL | DM;



Память: 0.45 MB
Время: 0.015 c
14-98280
Nega
2002-09-01 13:29
2002.09.30
Что такое виртуальный метод ?


3-98003
Макс
2002-09-10 14:36
2002.09.30
LookUp - поля с большими массивами информации


3-97945
V aZ
2002-09-08 08:55
2002.09.30
Скажите еще раз, как из Access данные в IB перенесть


14-98278
NetBreaker666
2002-09-03 01:10
2002.09.30
Через 9 часов первый день Универа... МатМех... МатОбес... FUCK


3-97956
billybons
2002-09-09 08:01
2002.09.30
DBGrid




   Наверх