Flenov
23.01.2009, 03:46
Название не случайно.
Эти грёбаные потоки забрали у меня столько нервов, что просто ужас, но речь не о нервах.
Я поставил цель создать в Delphi 7 многопоточное приложение, которое будет работать с определённым узлом интернета.
Но этот узел нестабилен.
Когда к нему можно подкл, а когда низя.
Сначала я решил поступить так:
Я объявил массив для потоков.
TH: array[1..25] of Thread; //Кстати само имя класса Thread
А в самом потоке был цикл
while(условие, что есть данные) do
//Ну и тд.
Создавал я их иллементарно просто.
for i:=1 to 25 do
begin
TH[i]:=Thread.Create(False);
TH[i].FreeOnTerminate:=True;
TH[i].Priotity:=tpLowest;
end;
Но возникала проблемма, что через некоторое время все потоки засирались и дальше прога не работала.
Я решил поступить иначе.
Я кинул на форму таймер и на него стал создавать потоки разумеется с определённым интервалом
if (i>25) then i:=1;
TH[i]:=Thread.Create(False);
TH[i].FreeOnTerminate:=True;
TH[i].Priotity:=tpLowest;
i:=i+1;
Соответственно цикл из потока был убран и поток стал выполнять одно действие.
Но возникла другая проблемма.
Моя прога стала ох..енно жрать память.
Кто мне что посоветует?
На динамику всё проверил. Там всё освобождается.
Эти грёбаные потоки забрали у меня столько нервов, что просто ужас, но речь не о нервах.
Я поставил цель создать в Delphi 7 многопоточное приложение, которое будет работать с определённым узлом интернета.
Но этот узел нестабилен.
Когда к нему можно подкл, а когда низя.
Сначала я решил поступить так:
Я объявил массив для потоков.
TH: array[1..25] of Thread; //Кстати само имя класса Thread
А в самом потоке был цикл
while(условие, что есть данные) do
//Ну и тд.
Создавал я их иллементарно просто.
for i:=1 to 25 do
begin
TH[i]:=Thread.Create(False);
TH[i].FreeOnTerminate:=True;
TH[i].Priotity:=tpLowest;
end;
Но возникала проблемма, что через некоторое время все потоки засирались и дальше прога не работала.
Я решил поступить иначе.
Я кинул на форму таймер и на него стал создавать потоки разумеется с определённым интервалом
if (i>25) then i:=1;
TH[i]:=Thread.Create(False);
TH[i].FreeOnTerminate:=True;
TH[i].Priotity:=tpLowest;
i:=i+1;
Соответственно цикл из потока был убран и поток стал выполнять одно действие.
Но возникла другая проблемма.
Моя прога стала ох..енно жрать память.
Кто мне что посоветует?
На динамику всё проверил. Там всё освобождается.