Форум по программированию Delphi Sources

 



Вернуться   Форум по программированию Delphi Sources > Все о Delphi > Компоненты и классы
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 28.11.2018, 17:36
ImDoode ImDoode вне форума
Прохожий
 
Регистрация: 02.12.2010
Сообщения: 15
Репутация: 10
Вопрос Динамический 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;
Внутри функции sCheckSomeVal я периодически (по интервалу таймера) получаю некоторую строку (делаю интернет-запрос), и эту строку мне нужно сравнивать с переменной someVal.
Вопрос заключается в том, как мне передавать конкретно этому таймеру конкретно эту переменную? Область видимости переменной должен оставаться внутри функции startCheck, так как параллельно может быть запущено несколько экземпляров таймера
Так же рассматриваю альтернативный вариант без использования таймера, но не знаю, как можно проверять определённое условие раз в 3 секунды, и при этом не зависать программу
__________________
Не пускайте детей в интернет.
Ответить с цитированием
  #2  
Старый 28.11.2018, 18:24
ImDoode ImDoode вне форума
Прохожий
 
Регистрация: 02.12.2010
Сообщения: 15
Репутация: 10
По умолчанию

Как вариант появилась мысль - создать в области видимости формы динамический массив string, туда записывать нужные переменные, а в таймер в tag кидать индекс, по которому лежит нужное мне значение. Что скажете?
__________________
Не пускайте детей в интернет.
Ответить с цитированием
  #3  
Старый 28.11.2018, 19:58
Guaho Guaho вне форума
Новичок
 
Регистрация: 27.08.2017
Сообщения: 65
Версия Delphi: Delphi7
Репутация: 10
По умолчанию

Мне кажется, Вы всё усложняете. Во-первых, зачем создавать таймер динамически, если можно статически? Во-вторых, если число таймеров ("потоков опроса") будет невелико, можно и ручками каждый прописать. Если же стремиться к "красоте", чтобы не задумываясь создавать сколько угодно таймеров, тогда нужно упростить вопрос. Таймеры независимо делают запросы, в результате внутри их обработчиков мы получаем строковые значения. Далее тут же, в теле каждого таймерного обработчика, сравниваем с "эталонной" строкой. По результату сравнения можно, например Tag-ом управлять, чтоб из основного цикла программы смотреть. Но вообще ImDoode нормальный метод предложил - массив строк, указателем для которых будет Tag каждого таймера.
Ответить с цитированием
  #4  
Старый 28.11.2018, 20:56
Аватар для lmikle
lmikle lmikle вне форума
Модератор
 
Регистрация: 17.04.2008
Сообщения: 7,252
Версия Delphi: 7, XE3, 10.2
Репутация: 49087
По умолчанию

Значится так, "хватит этих извращений сказал командир корабля и стюардессу закопали" (с) Анекдот.
Для данной задачи таймер не подходит, от слова совсем.
1. Делаешь поток для обработки одного адреса. В потоке идет запрос, обработка данных, а потом sleep() на нужный интервал между запросами.
2. В основной программе делаешь список потоков (пул), создаешь их и запускаешь. По потоку на каждый адрес.
Тут где-то недавно пролетала тема с примером того, как делать подобный поток.
Ответить с цитированием
Ответ



Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 08:20.


 

Сайт

Форум

FAQ

RSS лента

Прочее

 

Copyright © Форум "Delphi Sources", 2004-2018

ВКонтакте   Facebook   Twitter