![]() |
|
Модераторы: Snowy, Poseidon, MetalFan |
![]()
|
|
| Молоток |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 41 Регистрация: 3.4.2008 Репутация: нет Всего: -2 |
Вот меня терзает задача уже несколько дней:
у меня есть Timer1 и он конкретно выполняет действия с интервалом. Как мне сделать что бы таймер выполнял рязные действия с разным интервалом, при этом на форме юзался только Один компонент таймера. Спасибо! Это сообщение отредактировал(а) Молоток - 16.4.2008, 16:00 |
|||
|
||||
| MetalFan |
|
|||
![]() Аццкий Сотона ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 3815 Регистрация: 2.10.2006 Где: Moscow Репутация: 14 Всего: 128 |
ишь какой! и рыбку съесть и сковородку не помыть.
так меня интервалы динамически -------------------- There are always someone smarter than you... |
|||
|
||||
| Молоток |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 41 Регистрация: 3.4.2008 Репутация: нет Всего: -2 |
MetalFan, Ну а толку ?
Если у меня допустим на 1 таймере надо выполнить 20 задач. |
|||
|
||||
| 1Andrey1 |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 78 Регистрация: 8.9.2007 Репутация: нет Всего: 4 |
я конечно не совсем понимаю зачем нужен такой изврат... но как вариант сделать чтобы таймер тикал чаще, в OnTimer считать количество тиков и выполнять каждое действие через определенное количество тиков, для каждого события - своё
|
|||
|
||||
| ama_kid |
|
|||
![]() АСУТП-кодер ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 1460 Регистрация: 5.3.2007 Где: Москва Репутация: нет Всего: 95 |
меняй динамически обработчик таймера
-------------------- самурай без меча подобен самураю с мечом, но только без меча |
|||
|
||||
| MetalFan |
|
|||
![]() Аццкий Сотона ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 3815 Регистрация: 2.10.2006 Где: Moscow Репутация: 14 Всего: 128 |
одновременно? невозможно -------------------- There are always someone smarter than you... |
|||
|
||||
| Poseidon |
|
|||
![]() Delphi developer ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 5273 Регистрация: 4.2.2005 Где: Гомель, Беларусь Репутация: 4 Всего: 133 |
Вместо TTimer используй TRxTimerList из библиотеки RxLib.
-------------------- Если хочешь, что бы что-то работало - используй написанное, если хочешь что-то понять - пиши сам... |
|||
|
||||
| Молоток |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 41 Регистрация: 3.4.2008 Репутация: нет Всего: -2 |
Poseidon, Спасибо!
1Andrey1, Также спасибо интересная идея. |
|||
|
||||
| mmvds |
|
|||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 230 Регистрация: 22.12.2007 Репутация: 1 Всего: 6 |
Находим наибольший общий делитель из всех интервалов выполнения задач, устанавливаем интервал таймера таким.
Например нужно чтоб задачи выполнялись каждые 1000, 2000, 3000 мс НОД(1000,2000,3000)=1000 ставим интервал таймера 1000. Далее заводим счетчик тактов (целочисленная переменная), когда он без остатка делится на нужный интервал/нод выполняем нужное действие для этого интервала. Пример:
|
|||
|
||||
| Poseidon |
|
|||
![]() Delphi developer ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 5273 Регистрация: 4.2.2005 Где: Гомель, Беларусь Репутация: 4 Всего: 133 |
mmvds, только вот проблема с ограниченностью i. Какого бы типа она не была, все-равно этот тип имеет максимально-допустимое значение. А если программе нужно работать день? А если неделю? А если серверное приложение и месяцами нужно "пахать"? Ну ты понял...
-------------------- Если хочешь, что бы что-то работало - используй написанное, если хочешь что-то понять - пиши сам... |
|||
|
||||
| mmvds |
|
|||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 230 Регистрация: 22.12.2007 Репутация: 1 Всего: 6 |
integer хватит на 2^31/1000/60/60/24 = приблизительно 25 дней это если интервал 1мс поставить
ну хорошо, добавим в конец обнуление после 2 млрд итераций, кстати в первой строчке у меня ошибка была вместо i:=i+Timer1.Interval; надо i:=i+1;
Это сообщение отредактировал(а) mmvds - 17.4.2008, 10:45 |
|||
|
||||
| Poseidon |
|
|||
![]() Delphi developer ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 5273 Регистрация: 4.2.2005 Где: Гомель, Беларусь Репутация: 4 Всего: 133 |
inc(i)
Короче, оффтоп. Харэ -------------------- Если хочешь, что бы что-то работало - используй написанное, если хочешь что-то понять - пиши сам... |
|||
|
||||
| mmvds |
|
|||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 230 Регистрация: 22.12.2007 Репутация: 1 Всего: 6 |
1000/1000 это для наглядности нужный интервал/нод, а i:=i+Timer1.Interval; действительно ошибка, т.к. 1000 mod 2 =0 а в первую итерацию операции для интервала 2000 не должны выполняться, так что никакого оффтопа
|
|||
|
||||
| Молоток |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 41 Регистрация: 3.4.2008 Репутация: нет Всего: -2 |
Poseidon, Мужики спасибо огромное много чего понел:
А если вот зачада так стоит: Денамический таймер: Я в листбокс добовляю зачдачу например cmd.exe /C start index.bat Далие Задаю задачу cmd.exe /C start index2.bat И так далие до безконечности. Как сделать что бы бежало в цикле и проверяло ? Спасибо. PS данные о задачах хранятся в реестре: тойсть есть переменная с интервалом и параметрами задачи. Как сделать что бы это работало всё в цикле. Спасибо! |
|||
|
||||
| Antony41 |
|
||||||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 332 Регистрация: 27.12.2008 Репутация: нет Всего: 1 |
создай отдельный поток в onExecute потока
и обращайся через синхронизацию к лист боксу
Добавлено @ 10:20 написал находу так что может есть ошибки Добавлено @ 10:23 еще можно в основном потоке, но я бы сделал всё таки в отдельном
Это сообщение отредактировал(а) Antony41 - 14.2.2013, 10:23 |
||||||
|
|||||||
![]()
|
| Правила форума "Delphi: Сети" | |
|
|
Запрещено: 1. Публиковать ссылки на вскрытые компоненты 2. Обсуждать взлом компонентов и делится вскрытыми компонентами
Если Вам помогли и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, Snowy, Poseidon, MetalFan. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Delphi: Сети | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |