Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 14.03.2010, 20:33   #1
TwiX
Участник клуба
 
Аватар для TwiX
 
Регистрация: 28.07.2009
Сообщений: 1,510
По умолчанию Второй день не могу понять куда утекает память...

Вот набросал небольшой примерчик - вроде всё везде освобождается, только с каждым кликом по кнопке памяти требуется примерно на 700кб больше...
Код:
  myThread = class(TThread)
    bmp: TBitmap;
    procedure Execute; override;
  public
    tag: integer;
    constructor Create;
    destructor Destroy;
  end;

var
  Form2: TForm2;

implementation

{$R *.dfm}

constructor myThread.Create;
begin
  bmp := TBitmap.Create;
  inherited Create(false);
end;

destructor myThread.Destroy;
begin
  bmp.Free;
  terminate;
  inherited Destroy;
end;

procedure myThread.Execute;
begin
  bmp.Width := 1000;
  bmp.Height := 1000;
  bmp.Canvas.brush.Color := clGreen;
  bmp.Canvas.FillRect(rect(10, 990, 990, 10));
  bmp.SaveToFile(inttostr(tag) + '.bmp');

  Destroy;
end;

procedure TForm2.Button1Click(Sender: TObject);
var
  a: myThread;
  i: integer;
begin
  for i := 0 to 50 - 1 do
  begin
    with myThread.Create do
      tag := i;
  end;
  beep;
end;
TwiX вне форума Ответить с цитированием
Старый 15.03.2010, 02:23   #2
eoln
Старожил
 
Аватар для eoln
 
Регистрация: 26.04.2008
Сообщений: 2,645
По умолчанию

Как проходит процедура Execute?
1) поработали с графикой, вернулись в процедуру
2) сохранили файл, вернулись в процедуру
3) удалили поток, вернулись в процедуру (а куда это мы вернулись? мы же удалили сами себя? )) ). Вот тут и утечка, нельзя самого себя изнутри удалять таким способом. Можно попросить кого-нибудь удалить или убери свой деструктор, а в процедуре Execute вместо Destroy пропиши
Код:
  bmp.Free;
  freeonterminate := true
eoln вне форума Ответить с цитированием
Старый 15.03.2010, 02:49   #3
TwiX
Участник клуба
 
Аватар для TwiX
 
Регистрация: 28.07.2009
Сообщений: 1,510
По умолчанию

Спасибо
Спасибо
Спасибо
=)

Update:
Вот только весы тыкнуть не могу. С форумом траблы какие-то (или с оперой) сегодня начались. Не могу тыкнуть ни один значок, по типу жирного текста, весов... Как исправится - обязательно тыкну)

Последний раз редактировалось TwiX; 15.03.2010 в 02:52.
TwiX вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Куда отследить куда утекает память? TwiX Общие вопросы Delphi 6 02.03.2010 03:10
не могу понять Dawystrik SQL, базы данных 0 06.09.2009 19:20
Не могу понять Superlotles Помощь студентам 8 31.08.2009 20:39
уже второй день парюсь! Алёна БД в Delphi 9 16.03.2007 08:22
не могу понять... Dutchman Паскаль, Turbo Pascal, PascalABC.NET 4 14.12.2006 07:14