Вниз
Скачать: CL | DM;

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 вся ветка

Скачать: CL | DM;



Память: 0.46 MB
Время: 0.024 c
5-1127814102
Schooler
2005-09-27 13:41
2006.03.26
TOwnedCollection и стандартный редактор.


2-1141670649
KILROY
2006-03-06 21:44
2006.03.26
ADOTable...


3-1138718238
Mac_
2006-01-31 17:37
2006.03.26
Как сохранить результат запроса в dbf формате ?


15-1141484609
Зм1й
2006-03-04 18:03
2006.03.26
Помогите с WebMoney!


2-1141820098
Fenix
2006-03-08 15:14
2006.03.26
Форма и ДЛЛ




   Наверх