Текущий архив: 2002.09.30;
Скачать: 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 вся ветка
Текущий архив: 2002.09.30;
Скачать: CL | DM;
Память: 0.44 MB
Время: 0.008 c