![]() |
|
|
#1
|
||||
|
||||
|
Собственно как создать неизвестное количество таймеров
... TimerPool : array of TTimer; ... TimerPool[1] := TTimer.Create(Self); TimerPool[1] .Interval := 500; TimerPool[1].OnTimer := .... TimerPool[1].Enabled := True; так собственно будут не зависимые друг от друга таймеры создаваться |
|
#2
|
||||
|
||||
|
Код:
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
|
||||
|
||||
|
Код:
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
|
||||
|
||||
|
Можно создавать вообще без массива, но вот добираться до нужного таймера будет проблематично:
Код:
with TTimer.Create(Self)
do begin
Interval := 1000;
OnTimer := MyProc;
Enabled := True;
end; |
|
#5
|
||||
|
||||
|
нет не пойдет мне всетаки нужно его убирать будет
|
|
#6
|
||||
|
||||
|
Если правильно понял, тебе надо отключить таймер? Или полностью удалить его? Если удалить - будет сложнее, т.к. все таймеры находятся в дин. массиве. Если же просто отключить, то я уже говорил как:
Код:
procedure TForm1.myproc(Sender: TObject); begin ТВОИ ДЕЙСТВИЯ ... TTimer(Sender).Enabled := False; end; |
|
#7
|
||||
|
||||
|
мне в принципе без разницы главное чтобы ресурсов не ел и был отключен
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
|
||||
|
||||
|
Естественно для каждого таймера процедура можно сказать отдельная.
То бишь, как я уже говорил, пиши TTimer(Sender).Enabled := False, и это отключит только 1 таймер. |
|
#9
|
||||
|
||||
|
А зачем вам вообще их создавать в таком количестве? Может вы в принципе неправильный подход к задаче выбрали?
|
|
#10
|
||||
|
||||
|
v1s2222 ну да как видите так и делаю, спасибо, таймеров будет много каждый сам себя отрубит потом
Страдалецъ думаю это самый простой, пробовал с потоками вобще муть получилась, да думаю таймеров будет много создаваться, ну если отрубаться будут думаю стабильно будет не загружено, так и должно быть вобщем) Последний раз редактировалось ALexandr555, 03.02.2011 в 20:26. |
|
#11
|
||||
|
||||
|
Если у тебя все таймеры работают с одним интервалом?
|
|
#12
|
||||
|
||||
|
они в разное время создаваться будут к томуже не более чем через 2 секнды вырубаться
|
|
#13
|
||||
|
||||
|
Я к чему, просто таймеры насколько я помню не создаются в отдельных потоках, поэтому если есть необходимость раскидать некое задание на множество мелких подзадач с индивидуальным таймером, то так не получится.
|
|
#14
|
||||
|
||||
|
нет нет, изначально пробовал решить свою проблемму с помошью потоков, потом пришла идея проще через таймеры
|
|
#15
|
||||
|
||||
|
ИМХО - бред. Таймеры будут плодиться, и соответственно, жрать память. Если не получишь stack overflow - то как минимум ресурсам настанет полный 3,1415926535897932384626433832795...пец.
З.Ы. Очередной кулхацкер создаёт очередную ICQ-флудилку? |