IPB
ЛогинПароль:

> ВНИМАНИЕ!

Прежде чем задать вопрос, смотрите FAQ.
Рекомендуем загрузить DRKB.

Наладить общение поможет, если вы подпишитесь по почте на новые темы в этом форуме.

 
 Ответить  Открыть новую тему 
> Timer+???
сообщение
Сообщение #1


Пионер
**

Группа: Пользователи
Сообщений: 53
Пол: Мужской

Репутация: -  0  +


Подскажите реализацию следуюшего алгоритма:
нужно чтобы через определенный интервал (например 5-7 минут) последовательно запускались нужные приложения. Например, в 15:00 запустить калькулятор, а в 15:05 - IE. Это должно происходить автоматически. Также нужно, чтобы можно было время устанавливать вручную и выбирать интервал (например 5,10,20 мин и т.д.)


--------------------
Админ StudCity.RU
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #2


Бывалый
***

Группа: Пользователи
Сообщений: 282

Репутация: -  0  +


ну по таймеру и сдеди за временем в чём проблема -то?

Добавлено (18.03.03 20:41):
либо юзай TTimer либо "ставь" таймер через SetTimer и в процедуре окна обрабатывай сообщение WM_TIMER либо в той же SetTimer можно определить ф-ию таймера...в хелпе всё есть
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #3


Бывалый
***

Группа: Пользователи
Сообщений: 156
Пол: Мужской

Репутация: -  0  +


Поставь глобальную переменную (j), а на таймер поставь что-то типа (если всего прилрожений 3, если больше то видоизмени код):

Код
inc(j);
Case (j mod 3) of
 0:; {запуск "программы1"}
 1:; {запуск "программы2"}
 2:; {запуск "программы3"}
End;


Добавлено (18.03.03 21:02):
Ага например кладёшь memo на форму, устанавливаешь интервал таймера на нужный интервал, в обработчике таймера пишешь код:

Код
inc(j); // глобальная переменная - описываешь сразу после Uses модуля.
ShellExecute(...,Memo1.lines[j mod Memo1.lines.count],...);


Таким образом будут запускаться все приложения которые написаны в Memo по порядку.


--------------------
With the best regards Vit

Все всегда уезжают навсегда. Вернуться невозможно-вместо нас всегда возвращается кто-то другой
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #4


Бывалый
***

Группа: Пользователи
Сообщений: 282

Репутация: -  0  +


to Vit
в твоей реализации надо тип переменной i брать довольно большого размера
для избежания ошибки при переполнении
так лучше
и в case-е ничего не считается...

Код
...
var i: Byte = 0;
...
Inc(i);
case i of
1: "запуск первой проги"
2: "запуск второй проги"
3: begin i := 0; "запуск третьей проги"; end;
end;
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #5


Бывалый
***

Группа: Пользователи
Сообщений: 156
Пол: Мужской

Репутация: -  0  +


Обычный Integer - до 2х миллиардов - т.е. даже если таймер поставить на самый маленький возможный интервал в 10 ms то его хватит на год... Ставить разрядность меньшую чем Integer не следует, так как процессор всё равно будет работать с Integer, а вот код из-за преобразований будет менее оптимальным. А так как автор хочет иметь интервал 5 минут, то переменной хватит на 19000 лет....


--------------------
With the best regards Vit

Все всегда уезжают навсегда. Вернуться невозможно-вместо нас всегда возвращается кто-то другой
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #6


Бывалый
***

Группа: Пользователи
Сообщений: 282

Репутация: -  0  +


таймер же "тикает" приближённо каждые 55 миллисекунд ведь установка интервала таймера в меньшую величину ведь ничего не даст!?
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #7


Бывалый
***

Группа: Пользователи
Сообщений: 156
Пол: Мужской

Репутация: -  0  +


Цитата
таймер же "тикает" приближённо каждые 55 миллисекунд ведь установка интервала таймера в меньшую величину ведь ничего не даст!?


Хрен его знает! Но меньше 10 миллисекунд точно не имеет значения, меньше 100 миллисекунд будет врать безбожно, а на более больших интервалах погрешность будет в перделах разумного. Впрочем топик не об этом.


--------------------
With the best regards Vit

Все всегда уезжают навсегда. Вернуться невозможно-вместо нас всегда возвращается кто-то другой
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #8


Adminь
****

Группа: Пользователи
Сообщений: 803
Пол: Мужской
Реальное имя: Евгений

Репутация: -  5  +


Цитата
Хрен его знает! Но меньше 10 миллисекунд точно не имеет значения, меньше 100 миллисекунд будет врать безбожно, а на более больших интервалах погрешность будет в перделах разумного. Впрочем топик не об этом.

Невыдержал, решил проверить...
За 10 минут погрешность таймеров
в 1 сек - менее 0.01%
в 0.01 сек - менее 1%

для проверки использовался код:

### 1 ###

Код
var
 T1, T2, T3: Integer;

procedure TForm1.FormCreate(Sender: TObject);
begin
 T1 := GetTickCount;
 T2 := 0;
 T3 := 0;
 Timer1.Enabled := True; {1}
 Timer2.Enabled := True; {1000}
end;

procedure TForm1.Timer1Timer(Sender: TObject);
begin
 Inc(T2, 10);
end;

procedure TForm1.Timer2Timer(Sender: TObject);
begin
 Inc(T3, 1000);
end;

procedure TForm1.Timer3Timer(Sender: TObject);
begin
 Label1.Caption := IntToStr(GetTickCount-T1);
 Label2.Caption := IntToStr(T2);
 Label3.Caption := IntToStr(T3);
end;


### 2 ###

Код
var
 T1, T2, T3: Integer;
 Mas: array[0..999] of Integer;

procedure TForm1.FormCreate(Sender: TObject);
begin
 T1 := 0;
 T2 := GetTickCount;
 Timer1.Enabled := True;
end;

procedure TForm1.Timer1Timer(Sender: TObject);
begin
 T3 := GetTickCount;
 Mas[T1] := T3-T2;
 T2 := T3;
 Inc(T1, 1);
 if T1>999 then
 begin
   Timer1.Enabled := False;
   for T1 := 0 to 999 do
     Memo1.Lines.Add(IntToStr(Mas[T1]));
 end;
end;


Сообщение отредактировано: volvo -
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 

 Ответить  Открыть новую тему 
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 





- Текстовая версия 24.04.2024 19:56
500Gb HDD, 6Gb RAM, 2 Cores, 7 EUR в месяц — такие хостинги правда бывают
Связь с администрацией: bu_gen в домене octagram.name