|
|
Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
|
Опции темы | Поиск в этой теме | Опции просмотра |
#1
|
|||
|
|||
Динамический TTimer и передача параметров в него
Всем добрый день, столкнулся с проблемой.
У меня есть функция, внутри которой создаётся таймер Код:
procedure startCheck; var someVal: string; sTimer: TTimer; begin someVal:= '666_test'; sTimer := TTimer.Create(nil); sTimer.Enabled := False; sTimer.OnTimer := sCheckSomeVal; sTimer.Interval := 3000; s.Timer.Enabled := True; end; Вопрос заключается в том, как мне передавать конкретно этому таймеру конкретно эту переменную? Область видимости переменной должен оставаться внутри функции startCheck, так как параллельно может быть запущено несколько экземпляров таймера Так же рассматриваю альтернативный вариант без использования таймера, но не знаю, как можно проверять определённое условие раз в 3 секунды, и при этом не зависать программу Не пускайте детей в интернет. |
#2
|
|||
|
|||
Как вариант появилась мысль - создать в области видимости формы динамический массив string, туда записывать нужные переменные, а в таймер в tag кидать индекс, по которому лежит нужное мне значение. Что скажете?
Не пускайте детей в интернет. |
#3
|
||||
|
||||
Мне кажется, Вы всё усложняете. Во-первых, зачем создавать таймер динамически, если можно статически? Во-вторых, если число таймеров ("потоков опроса") будет невелико, можно и ручками каждый прописать. Если же стремиться к "красоте", чтобы не задумываясь создавать сколько угодно таймеров, тогда нужно упростить вопрос. Таймеры независимо делают запросы, в результате внутри их обработчиков мы получаем строковые значения. Далее тут же, в теле каждого таймерного обработчика, сравниваем с "эталонной" строкой. По результату сравнения можно, например Tag-ом управлять, чтоб из основного цикла программы смотреть. Но вообще ImDoode нормальный метод предложил - массив строк, указателем для которых будет Tag каждого таймера.
|
#4
|
|||
|
|||
Значится так, "хватит этих извращений сказал командир корабля и стюардессу закопали" (с) Анекдот.
Для данной задачи таймер не подходит, от слова совсем. 1. Делаешь поток для обработки одного адреса. В потоке идет запрос, обработка данных, а потом sleep() на нужный интервал между запросами. 2. В основной программе делаешь список потоков (пул), создаешь их и запускаешь. По потоку на каждый адрес. Тут где-то недавно пролетала тема с примером того, как делать подобный поток. |