Главная страница
    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.037 c
15-1141154534
Piter
2006-02-28 22:22
2006.03.26
Посоветуйте мобильный телефон для GPRS-интернет


15-1141248590
Игорь Шевченко
2006-03-02 00:29
2006.03.26
Катя, с днем рождения!


6-1134218767
Igor_thief
2005-12-10 15:46
2006.03.26
TidTelnet (Indy 10)


4-1136211191
Человек
2006-01-02 17:13
2006.03.26
Hook клавиатуры


11-1122728443
jumpingjack
2005-07-30 17:00
2006.03.26
Не компилируется KOL проект.





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский