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

Delphi Sources



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

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 03.02.2011, 16:55
Аватар для ALexandr555
ALexandr555 ALexandr555 вне форума
Специалист
 
Регистрация: 09.10.2010
Адрес: Тольятти
Сообщения: 803
Версия Delphi: Delphi 7
Репутация: 2064
По умолчанию создание таймера

Собственно как создать неизвестное количество таймеров

...
TimerPool : array of TTimer;
...

TimerPool[1] := TTimer.Create(Self);
TimerPool[1] .Interval := 500;
TimerPool[1].OnTimer := ....
TimerPool[1].Enabled := True;

так собственно будут не зависимые друг от друга таймеры создаваться
Ответить с цитированием
  #2  
Старый 03.02.2011, 17:36
Аватар для v1s2222
v1s2222 v1s2222 вне форума
Продвинутый
 
Регистрация: 07.09.2010
Сообщения: 726
Репутация: 26711
По умолчанию

Код:
procedure TForm1.myproc(Sender: TObject);
begin
// твои действия... можно работать с таймером (если надо):
  TTimer(Sender).Tag, Interval, Enabled...
end;

procedure TForm1.FormCreate(Sender: TObject);
var
  x: array of TTimer;
  len, i: integer;
begin
  len:=0;
  setlength(x, len+1); // 1 таймер создаем
  for i:=0 to len do begin
    x[i] := TTimer.Create(self);
    x[i].Interval := 1000;
    x[i].OnTimer := myproc;
    x[i].Enabled := True;
  end;
end;
Это как один из вариантов...
__________________
Помогаю за Спасибо
Ответить с цитированием
  #3  
Старый 03.02.2011, 17:51
Аватар для ALexandr555
ALexandr555 ALexandr555 вне форума
Специалист
 
Регистрация: 09.10.2010
Адрес: Тольятти
Сообщения: 803
Версия Delphi: Delphi 7
Репутация: 2064
По умолчанию

Код:
rocedure TForm1.FormCreate(Sender: TObject);
var
  x: array of TTimer;
  len, i: integer;
begin
  len:=0;
  setlength(x, len+1); 
    x[len] := TTimer.Create(self);
    x[len].Interval := 1000;
    x[len].OnTimer := myproc;
    x[len].Enabled := True;
  end;
end;

Спасибо, у меня по процедуре будет создаваться таймер а не определенное чилсло таймеров сразу так что вроде так
да и как мне в procedure TForm1.myproc(Sender: TObject);
удалить таймер который использует её так скажем

TForm1.myproc(Sender: TObject);
действия
удаляем
этот таймер
Ответить с цитированием
  #4  
Старый 03.02.2011, 17:59
Аватар для Страдалецъ
Страдалецъ Страдалецъ вне форума
Гуру
 
Регистрация: 09.03.2009
Адрес: На курорте, из окна вижу теплое Баренцево море. Бррр.
Сообщения: 4,723
Репутация: 52347
По умолчанию

Можно создавать вообще без массива, но вот добираться до нужного таймера будет проблематично:
Код:
with TTimer.Create(Self)
do begin
    Interval := 1000;
    OnTimer := MyProc;
    Enabled := True;    
    end;
__________________
Жизнь такова какова она есть и больше никакова.
Помогаю за спасибо.
Ответить с цитированием
  #5  
Старый 03.02.2011, 18:08
Аватар для ALexandr555
ALexandr555 ALexandr555 вне форума
Специалист
 
Регистрация: 09.10.2010
Адрес: Тольятти
Сообщения: 803
Версия Delphi: Delphi 7
Репутация: 2064
По умолчанию

нет не пойдет мне всетаки нужно его убирать будет
Ответить с цитированием
  #6  
Старый 03.02.2011, 19:19
Аватар для v1s2222
v1s2222 v1s2222 вне форума
Продвинутый
 
Регистрация: 07.09.2010
Сообщения: 726
Репутация: 26711
По умолчанию

Если правильно понял, тебе надо отключить таймер? Или полностью удалить его? Если удалить - будет сложнее, т.к. все таймеры находятся в дин. массиве. Если же просто отключить, то я уже говорил как:
Код:
procedure TForm1.myproc(Sender: TObject);
begin
ТВОИ ДЕЙСТВИЯ
...

  TTimer(Sender).Enabled := False;
end;
__________________
Помогаю за Спасибо
Ответить с цитированием
  #7  
Старый 03.02.2011, 20:03
Аватар для ALexandr555
ALexandr555 ALexandr555 вне форума
Специалист
 
Регистрация: 09.10.2010
Адрес: Тольятти
Сообщения: 803
Версия Delphi: Delphi 7
Репутация: 2064
По умолчанию

мне в принципе без разницы главное чтобы ресурсов не ел и был отключен

Timersend1 это myproc

Код:
procedure TForm1.Timersend1(Sender: TObject);
var
parelelPK1: TstringList;
CR1: boolean;
shet1,conec1: integer;
UIN,Msg: string;
begin
if CR1 then begin
parelelPK1:= TstringList.Create;
parelelPK1.Assign(PK1);
pk1.clear;
conec1:=parelelPK1.Count;
shet1:=0;
CR1:=false;
end;
UIN:=copy(pk1.strings[shet1],1,pos('=',pk1.strings[shet1])-1);
Msg:=copy(pk1.strings[shet1],pos('=',pk1.strings[shet1])+1,length(pk1.strings[shet1]));
obrabotchik1(UIN, Msg);
shet1:=shet1+1;
if shet1>conec1 then TTimer(Sender).Enabled := False;
end;

меня интересует будет ли для каждого таймера свое тобишь, создался таймер в переменной у него присвоилось parelelPK1.Assign(PK1); и если создастся еще один таймер не присвоется ли к этому таймеру уже новое значение
Ответить с цитированием
  #8  
Старый 03.02.2011, 20:11
Аватар для v1s2222
v1s2222 v1s2222 вне форума
Продвинутый
 
Регистрация: 07.09.2010
Сообщения: 726
Репутация: 26711
По умолчанию

Естественно для каждого таймера процедура можно сказать отдельная.
То бишь, как я уже говорил, пиши TTimer(Sender).Enabled := False, и это отключит только 1 таймер.
__________________
Помогаю за Спасибо
Ответить с цитированием
  #9  
Старый 03.02.2011, 20:12
Аватар для Страдалецъ
Страдалецъ Страдалецъ вне форума
Гуру
 
Регистрация: 09.03.2009
Адрес: На курорте, из окна вижу теплое Баренцево море. Бррр.
Сообщения: 4,723
Репутация: 52347
По умолчанию

А зачем вам вообще их создавать в таком количестве? Может вы в принципе неправильный подход к задаче выбрали?
__________________
Жизнь такова какова она есть и больше никакова.
Помогаю за спасибо.
Ответить с цитированием
  #10  
Старый 03.02.2011, 20:23
Аватар для ALexandr555
ALexandr555 ALexandr555 вне форума
Специалист
 
Регистрация: 09.10.2010
Адрес: Тольятти
Сообщения: 803
Версия Delphi: Delphi 7
Репутация: 2064
По умолчанию

v1s2222 ну да как видите так и делаю, спасибо, таймеров будет много каждый сам себя отрубит потом
Страдалецъ думаю это самый простой, пробовал с потоками вобще муть получилась, да думаю таймеров будет много создаваться, ну если отрубаться будут думаю стабильно будет не загружено, так и должно быть вобщем)

Последний раз редактировалось ALexandr555, 03.02.2011 в 20:26.
Ответить с цитированием
  #11  
Старый 03.02.2011, 20:24
Аватар для M.A.D.M.A.N.
M.A.D.M.A.N. M.A.D.M.A.N. вне форума
Sir Richard Abramson
 
Регистрация: 05.04.2008
Сообщения: 5,505
Версия Delphi: XE10
Репутация: выкл
По умолчанию

Если у тебя все таймеры работают с одним интервалом?
__________________
— Как тебя понимать?
— Понимать меня не обязательно. Обязательно меня любить и кормить вовремя.


На Delphi, увы, больше не программирую.
Рекомендуемая литература по программированию
Ответить с цитированием
  #12  
Старый 03.02.2011, 20:31
Аватар для ALexandr555
ALexandr555 ALexandr555 вне форума
Специалист
 
Регистрация: 09.10.2010
Адрес: Тольятти
Сообщения: 803
Версия Delphi: Delphi 7
Репутация: 2064
По умолчанию

они в разное время создаваться будут к томуже не более чем через 2 секнды вырубаться
Ответить с цитированием
  #13  
Старый 03.02.2011, 20:31
Аватар для Страдалецъ
Страдалецъ Страдалецъ вне форума
Гуру
 
Регистрация: 09.03.2009
Адрес: На курорте, из окна вижу теплое Баренцево море. Бррр.
Сообщения: 4,723
Репутация: 52347
По умолчанию

Я к чему, просто таймеры насколько я помню не создаются в отдельных потоках, поэтому если есть необходимость раскидать некое задание на множество мелких подзадач с индивидуальным таймером, то так не получится.
__________________
Жизнь такова какова она есть и больше никакова.
Помогаю за спасибо.
Ответить с цитированием
  #14  
Старый 03.02.2011, 20:32
Аватар для ALexandr555
ALexandr555 ALexandr555 вне форума
Специалист
 
Регистрация: 09.10.2010
Адрес: Тольятти
Сообщения: 803
Версия Delphi: Delphi 7
Репутация: 2064
По умолчанию

нет нет, изначально пробовал решить свою проблемму с помошью потоков, потом пришла идея проще через таймеры
Ответить с цитированием
  #15  
Старый 03.02.2011, 21:00
Аватар для PhoeniX
PhoeniX PhoeniX вне форума
Always hardcore!
 
Регистрация: 04.03.2009
Адрес: СПб
Сообщения: 3,239
Версия Delphi: GCC/FPC/FASM
Репутация: 62149
По умолчанию

ИМХО - бред. Таймеры будут плодиться, и соответственно, жрать память. Если не получишь stack overflow - то как минимум ресурсам настанет полный 3,1415926535897932384626433832795...пец.

З.Ы. Очередной кулхацкер создаёт очередную ICQ-флудилку?
__________________
Оставайтесь хорошими людьми...
VK id2634397, ds [at] phoenix [dot] dj
Ответить с цитированием
Ответ


Delphi Sources

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

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

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

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


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


 

Сайт

Форум

FAQ

Соглашения

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2025