Timer+??? |
Прежде чем задать вопрос, смотрите FAQ.
Рекомендуем загрузить DRKB.
Timer+??? |
dark0ut |
18.03.2003 14:28
Сообщение
#1
|
Пионер Группа: Пользователи Сообщений: 53 Пол: Мужской Репутация: 0 |
Подскажите реализацию следуюшего алгоритма:
нужно чтобы через определенный интервал (например 5-7 минут) последовательно запускались нужные приложения. Например, в 15:00 запустить калькулятор, а в 15:05 - IE. Это должно происходить автоматически. Также нужно, чтобы можно было время устанавливать вручную и выбирать интервал (например 5,10,20 мин и т.д.) -------------------- Админ StudCity.RU
|
___ALex___ |
18.03.2003 21:38
Сообщение
#2
|
Бывалый Группа: Пользователи Сообщений: 282 Репутация: 0 |
ну по таймеру и сдеди за временем в чём проблема -то?
Добавлено (18.03.03 20:41): либо юзай TTimer либо "ставь" таймер через SetTimer и в процедуре окна обрабатывай сообщение WM_TIMER либо в той же SetTimer можно определить ф-ию таймера...в хелпе всё есть |
Vit |
18.03.2003 21:58
Сообщение
#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
Все всегда уезжают навсегда. Вернуться невозможно-вместо нас всегда возвращается кто-то другой |
___ALex___ |
19.03.2003 17:37
Сообщение
#4
|
Бывалый Группа: Пользователи Сообщений: 282 Репутация: 0 |
to Vit
в твоей реализации надо тип переменной i брать довольно большого размера для избежания ошибки при переполнении так лучше и в case-е ничего не считается... Код ... var i: Byte = 0; ... Inc(i); case i of 1: "запуск первой проги" 2: "запуск второй проги" 3: begin i := 0; "запуск третьей проги"; end; end; |
Vit |
19.03.2003 19:31
Сообщение
#5
|
Бывалый Группа: Пользователи Сообщений: 156 Пол: Мужской Репутация: 0 |
Обычный Integer - до 2х миллиардов - т.е. даже если таймер поставить на самый маленький возможный интервал в 10 ms то его хватит на год... Ставить разрядность меньшую чем Integer не следует, так как процессор всё равно будет работать с Integer, а вот код из-за преобразований будет менее оптимальным. А так как автор хочет иметь интервал 5 минут, то переменной хватит на 19000 лет....
-------------------- With the best regards Vit
Все всегда уезжают навсегда. Вернуться невозможно-вместо нас всегда возвращается кто-то другой |
___ALex___ |
19.03.2003 21:21
Сообщение
#6
|
Бывалый Группа: Пользователи Сообщений: 282 Репутация: 0 |
таймер же "тикает" приближённо каждые 55 миллисекунд ведь установка интервала таймера в меньшую величину ведь ничего не даст!?
|
Vit |
19.03.2003 22:30
Сообщение
#7
|
Бывалый Группа: Пользователи Сообщений: 156 Пол: Мужской Репутация: 0 |
Цитата таймер же "тикает" приближённо каждые 55 миллисекунд ведь установка интервала таймера в меньшую величину ведь ничего не даст!? Хрен его знает! Но меньше 10 миллисекунд точно не имеет значения, меньше 100 миллисекунд будет врать безбожно, а на более больших интервалах погрешность будет в перделах разумного. Впрочем топик не об этом. -------------------- With the best regards Vit
Все всегда уезжают навсегда. Вернуться невозможно-вместо нас всегда возвращается кто-то другой |
mj |
23.04.2003 0:16
Сообщение
#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 - 5.01.2005 13:39 |
Текстовая версия | 27.09.2024 2:20 |