Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 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
2-1142260999
Митяй
2006-03-13 17:43
2006.03.26
Иерархические данные


2-1142341927
kilop
2006-03-14 16:12
2006.03.26
Есть процедура приостановления работы программы, но ...


2-1142170734
Wolffen
2006-03-12 16:38
2006.03.26
Какой процедурой запускаются приложения


15-1141061124
grisme
2006-02-27 20:25
2006.03.26
Старая, избитая тема


2-1141965636
_Mike_
2006-03-10 07:40
2006.03.26
Использование Drag&Drop в ListView





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский