Главная страница
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.071 c
2-1141644435
Junior1
2006-03-06 14:27
2006.03.26
Прочитать файл в массив


2-1141745484
Nsk3D
2006-03-07 18:31
2006.03.26
где собака зарыта?


2-1142136727
setis
2006-03-12 07:12
2006.03.26
Погогите сделать SELECT


2-1141708813
Sirus
2006-03-07 08:20
2006.03.26
Объект Canvas


15-1141329491
Aven
2006-03-02 22:58
2006.03.26
Разработка сервер WoW на Дельфи