Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Помогите с переходом даты [D3, Win95/98, Win2k]


cher_gvf ©   (2002-09-18 17:10:00) 

Допустим,мне нужно запускать процесс в период с 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;

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


Separator   (2002-09-18 21:10:00) [1]

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

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;


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

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


Наверх

Титульная страница Поиск, карта сайта Написать письмо