Модераторы: Poseidon, Snowy, bems, MetalFan
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Как осободить память после того как, поток отработал ? 
:(
    Опции темы
RaIDeR
Дата 25.7.2005, 16:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 116
Регистрация: 20.6.2005

Репутация: 1
Всего: 4



Вобщем Я создаю поток так:

Код

procedure TForm1.Button1Click(Sender: TObject);
var
  C: Cardinal;
begin
  hThrd := CreateThread(nil, 1024, @Proc, Self, 0, C);
end;


Proc - это процедурина в которой происходит цикл(внутри цикла всё что угодно)
Всё то время пока исполняется процедура прога в наглую "жрёт" память,
после того как проца отроботала память не освобождается, даже
если сделать так:

Код

procedure TForm1.Button2Click(Sender: TObject);
var
  E: Cardinal;
begin
  GetExitCodeThread(hThrd, E);
  TerminateThread(hThrd, E);
  CloseHandle(hThrd);
end;


Что нужно сделать для того чтобы прога освобождала "съеденную" память ?
Ведь если например нужно будет запускать этот поток неоднократно, то
скока-ж памяти тогда потребуется ? smile
PM MAIL   Вверх
Rrader
Дата 25.7.2005, 16:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Inspired =)
***


Профиль
Группа: Экс. модератор
Сообщений: 1535
Регистрация: 7.5.2005

Репутация: 70
Всего: 191



О том, когда нужно освободить память, решает Винда. Возможно, она захочет подержать её какое-то время, и лишь потом освободить. smile


--------------------
Let's do this quickly!
Rest in peace, Vit!
PM MAIL Skype   Вверх
Poseidon
Дата 25.7.2005, 17:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Delphi developer
****


Профиль
Группа: Комодератор
Сообщений: 5273
Регистрация: 4.2.2005
Где: Гомель, Беларусь

Репутация: 53
Всего: 133



RaIDeR, а почему ты не хочешь использовать класс TThread? Там есть деструктор Destroy, каторый завершает поток и высвобождает все ресурсы, связанные с объектом TThread.
Добавлено @ 17:06
А еще своиство FreeOnTerminate smile


--------------------
Если хочешь, что бы что-то работало - используй написанное, 
если хочешь что-то понять - пиши сам...
PM MAIL ICQ   Вверх
RaIDeR
Дата 25.7.2005, 21:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 116
Регистрация: 20.6.2005

Репутация: 1
Всего: 4



Poseidon, где можно по подробней почитать/ознакомиться с классом TThread ?

ps
Первый раз с потоками связался.
PM MAIL   Вверх
Quadr0
Дата 25.7.2005, 23:20 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











...

Это сообщение отредактировал(а) Quadr0 - 15.7.2011, 00:52
  Вверх
Akella
Дата 26.7.2005, 09:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Творец
****


Профиль
Группа: Модератор
Сообщений: 18485
Регистрация: 14.5.2003
Где: Корусант

Репутация: 36
Всего: 329



Цитата(RaIDeR @ 25.7.2005, 16:48)
Ведь если например нужно будет запускать этот поток неоднократно, то
скока-ж памяти тогда потребуется ?


Вот потому-то и винда не освобождает сразу память. smile
Тебе нужно почитать статейку про менеджер памяти WinXP и о встроенной оптимизации.
PM MAIL   Вверх
Петрович
Дата 26.7.2005, 09:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1000
Регистрация: 2.12.2003
Где: Москва

Репутация: 25
Всего: 55



Цитата(RaIDeR @ 25.7.2005, 22:54)
Poseidon, где можно по подробней почитать/ознакомиться с классом TThread ?

Как всегда рекомендую статью Многопоточность - как это делается в Дельфи. (Перевод статьи "Martin Harvey. Multithreading - The Delphi Way." сделанный Борисом Новгородовым)

Цитата(RaIDeR @ 25.7.2005, 17:48)
Что нужно сделать для того чтобы прога освобождала "съеденную" память ?
Ведь если например нужно будет запускать этот поток неоднократно, то
скока-ж памяти тогда потребуется ?

...

С памятью не все просто. Есть несколько обязательных правил:

1. Память выделяемая потоку под стек распределяется и освобождается системой. Т.е. при корректном завершении потока о ней заботиться не надо.
2. Память выделяемую явно в процедуре потока должна освобождать сама процедура потока.
3. Память выделенная под создаваемые потоком Delphi-объекты, должна освобождаться самим потоком. Т.е. Все созданные потоком объекты должны им-же и уничтожаться.
4. Хендл потока, как и все созданные им хендлы обязательно должны быть закрыты как только станут не нужными. Иначе, это тоже может приводить к "утечке" памяти. Например, см. последний фрагмент из http://forum.vingrad.ru/index.php?showtopi...ndpost&p=476565

Но, даже при их соблюдении, снаружи все может выглядеть не так пристойно как хочется smile. Хотя, на самом деле все будет впорядке. Это вызвано тем, что для оптимизации работы программ по скорости, и система, и сама Delphi занимается оптимизацией распределения памяти. Поэтому, иногда кажется что программа "жрет" память, хотя это и не так. А определить "жрет" или "не жрет", можно только специальными тестами, или наблюдением за длительной работой программы.
Напомню так же, что при завершении программы, почти все выделенные ей ресурсы автоматически освобождаются системой. Для коротко живущих (быстро исполняемых) программ, можно этим пользоваться smile, хотя это "дурной тон".


--------------------
Все знать невозможно, но хочется
PM ICQ   Вверх
RaIDeR
Дата 26.7.2005, 11:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 116
Регистрация: 20.6.2005

Репутация: 1
Всего: 4



Спасибо БОЛЬШОЕ !

Цитата
Как всегда рекомендую статью Многопоточность - как это делается в Дельфи. (Перевод статьи "Martin Harvey. Multithreading - The Delphi Way." сделанный Борисом Новгородовым)

Где бы эту книгу скачать ? smile
PM MAIL   Вверх
Петрович
Дата 26.7.2005, 11:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1000
Регистрация: 2.12.2003
Где: Москва

Репутация: 25
Всего: 55



Цитата(RaIDeR @ 26.7.2005, 12:22)
Где бы эту книгу скачать ?

Блин.
Ну народ совсем обленился. Просто кликнуть по ссылке уже не могут. smile


--------------------
Все знать невозможно, но хочется
PM ICQ   Вверх
RaIDeR
Дата 26.7.2005, 23:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 116
Регистрация: 20.6.2005

Репутация: 1
Всего: 4



Петрович, сорри ... блин, сорри ещё раз smile Я что-то в попыхах тогда не заметил ...
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Общие вопросы"
SnowyMetalFan
bemsPoseidon
Rrader

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по Дельфи обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, MetalFan, bems, Poseidon, Rrader.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0571 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.