Форум: "Начинающим";
Текущий архив: 2006.03.26;
Скачать: [xml.tar.bz2];
ВнизTStringList глюк или нет? Найти похожие ветки
← →
dabreezy (2006-03-10 18:20) [0]Добрый вечер.
Вообщем ситуация такая есть массив с потоками:
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 дня разобратся не могу?
← →
begin...end © (2006-03-10 18:32) [1]> Запускаются потоки след. образом:
Они не запускаются.
← →
dabreezy (2006-03-10 18:47) [2]
> begin...end © (10.03.06 18:32) [1]
Ну я забыл сказать что далее следует:
for i:=1 to thread_running do
thread_array[i].resume;
← →
MBo © (2006-03-10 18:56) [3]Ну а кто будет Tstringlist-ы освобождать?
Лучше их создание в конструктор потока поставь, а в деструктор - освобождение.
← →
begin...end © (2006-03-10 18:59) [4]> dabreezy (10.03.06 18:20)
> И в конце концов программа отрубается с ошибкой.
С какой?
Полный код (Execute, thread_done) можно увидеть?
> MBo © (10.03.06 18:56) [3]
Так, бесспорно, правильнее, но, судя по [0], они освобождаются по событию OnTerminate.
← →
dabreezy (2006-03-11 10:17) [5]
> begin...end © (10.03.06 18:59) [4]
> > dabreezy (10.03.06 18:20)
Спасибо за ответ. Я нашел в чем ошибка, но не знаю как это исправить. Оказывается потоков запускается не столько сколько в цикле, а больше. Может как-то по другому несколько потоков надо запускать? Например у меня значение kol_thread = 50, а запускается например 52 или даже 60, и постоянно изменяется во время работы программы. Почему так происходит?
Страницы: 1 вся ветка
Форум: "Начинающим";
Текущий архив: 2006.03.26;
Скачать: [xml.tar.bz2];
Память: 0.45 MB
Время: 0.091 c