![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
TStringList глюк или нет? [D7, XP]
dabreezy © (2006-03-10 18:20:00)Добрый вечер.
Вообщем ситуация такая есть массив с потоками:
TMyThread1 = class(TThread)
private
{ Private declarations }
protected
mass: Tstringlist;
procedure Execute; override;
end;
thread_array: array [1..100] of TMyThread1;
Запускаются потоки след. образом:
for i:=1 to kol_thread do
begin
try
Thread_array[i]:=TMyThread1.Create(true);
except
MessageDlg('Thread number:'+inttostr(i)+' dont run',mtError,[mbOK],0);
end;
Thread_array[i].mass:=Tstringlist.Create;
Thread_array[i].FreeOnTerminate:=true;
Thread_array[i].OnTerminate:=thread_done;
inc(thread_running);
end;
дальше в процедуре Execute в конце ее переменная mass освобождается так: mass.free; (пробовал в thread_done освобождать память,пробовал mass.destroy). Но память почему-то не освобождается? Т.е. если еще раз запустить потоки после их завершения? то в диспетчере задач windows видно, как память все прибавляется и прибавляется :( И в конце концов программа отрубается с ошибкой.
Может кто сталкивался? В чем может быть причина, уже 2 дня разобратся не могу?
dabreezy (2006-03-11 10:17:00) [1]
> begin...end © (10.03.06 18:59) [4]
> > dabreezy (10.03.06 18:20)
Спасибо за ответ. Я нашел в чем ошибка, но не знаю как это исправить. Оказывается потоков запускается не столько сколько в цикле, а больше. Может как-то по другому несколько потоков надо запускать? Например у меня значение kol_thread = 50, а запускается например 52 или даже 60, и постоянно изменяется во время работы программы. Почему так происходит?
begin...end (2006-03-10 18:59:00) [2]> dabreezy (10.03.06 18:20)
> И в конце концов программа отрубается с ошибкой.
С какой?
Полный код (Execute, thread_done) можно увидеть?
> MBo © (10.03.06 18:56) [3]
Так, бесспорно, правильнее, но, судя по [0], они освобождаются по событию OnTerminate.
MBo (2006-03-10 18:56:00) [3]Ну а кто будет Tstringlist-ы освобождать?
Лучше их создание в конструктор потока поставь, а в деструктор - освобождение.
dabreezy (2006-03-10 18:47:00) [4]
> begin...end © (10.03.06 18:32) [1]
Ну я забыл сказать что далее следует:
for i:=1 to thread_running do
thread_array[i].resume;
begin...end (2006-03-10 18:32:00) [5]> Запускаются потоки след. образом:
Они не запускаются.