Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2006.03.26;
Скачать: 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 вся ветка

Текущий архив: 2006.03.26;
Скачать: CL | DM;

Наверх




Память: 0.48 MB
Время: 0.048 c
2-1141940683
xroot
2006-03-10 00:44
2006.03.26
Наитупей6ий вопрос


9-1126253501
RzCoDer
2005-09-09 12:11
2006.03.26
ладшафт в OpenGL


2-1142003566
dera
2006-03-10 18:12
2006.03.26
Как сделать, чтоб нельзя было поменять значение в ComboBox?


15-1141306452
Amerzone
2006-03-02 16:34
2006.03.26
Посоветуйте бесплатный хостинг


2-1142064282
dera
2006-03-11 11:04
2006.03.26
Как уменшить растояние между точками на сетке формы?