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

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

Вернуться   Форум программистов > Delphi программирование > Мультимедиа в Delphi
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 04.03.2015, 23:39   #1
planetoxod
Пользователь
 
Регистрация: 04.03.2015
Сообщений: 22
По умолчанию Утечка памяти в потоке при многократной обработке TBitmap

Делфи7. Создаётся поток, где в цикле
создаётся Bitmap1 (5МByte), который сравнивается c Bitmap2, далее
Bitmap1.Free;
Sleep(5000);
повторяем цикл. Память по диспетчеру утекает по 5МByte, далее вылет за системные ресурсы.
Кто чем может, заранее благодарен.

Код Delphi
Код:
unit UnitPot;
 
interface
uses
  Classes {$IFDEF MSWINDOWS} , Windows {$ENDIF},SysUtils,SyncObjs,ShlObj,
  ComOBJ,ActiveX,ShellAPI,Buttons,StrUtils,Tlhelp32, Graphics, Controls,
  Messages;
 
var
 BitAr:array of array of TColor;
 procedure PotRis;
 
implementation
 
procedure CaptureScreenRect(h:HWND;ARect:TRect;var r:TBitmap);
var
 ScreenDC:HDC;
 a,b,x,y:integer;
begin
  a:=ARect.Right-ARect.Left;
  b:=ARect.Bottom-ARect.Top;
  if (a=0)or(b=0) then Exit;
  r.Width:=a;
  r.Height:=b;
  ScreenDC:=GetDC(h);
  try
   BitBlt(r.Canvas.Handle,0,0,r.Width,r.Height,ScreenDC,0,0,SRCCOPY);
   SetLength(BitAr,r.Width,r.Height);
   x:=0;
   while x<r.Width do begin
    y:=0;
    while y<r.Height do begin
     BitAr[x,y]:=r.Canvas.Pixels[x,y];///????
     y:=y+1;
    end;
    x:=x+1;
   end;
  finally
   ReleaseDC(h,ScreenDC);
  end;
end;
 
procedure ZagrRisW(h:HWND;var r:TBitmap);
var
 ARect:TRect;
begin
 try
  GetWindowRect(h,ARect);
  CaptureScreenRect(h,ARect,r);
 except
 end;
end;
 
procedure PotRis;
var
 r:TBitmap;
begin
 while true do begin
  try
   r:=TBitmap.Create;
   ZagrRisW(GetDesktopWindow,r); 
  finally
   r.Free;
  end;
  sleep(5000);
 end;
 EndThread(0);
end;
 
end.
Код:
Unit Main;
.......
procedure ZapPot;
var
 tid,hPot:Cardinal;
begin
  hPot:=BeginThread(nil,0,@PotRis,nil,0,tid);
end;

Последний раз редактировалось Stilet; 05.03.2015 в 07:45.
planetoxod вне форума Ответить с цитированием
Старый 04.03.2015, 23:57   #2
min@y™
Цифровой кот
Старожил
 
Аватар для min@y™
 
Регистрация: 29.08.2014
Сообщений: 7,656
По умолчанию

ну приведи ты код аккуратно, читать же невозможно!
Расскажу я вам, дружочки, как выращивать грибочки: нужно в поле утром рано сдвинуть два куска урана...
min@y™ вне форума Ответить с цитированием
Старый 05.03.2015, 00:11   #3
planetoxod
Пользователь
 
Регистрация: 04.03.2015
Сообщений: 22
По умолчанию

Как вставить правильно код?
planetoxod вне форума Ответить с цитированием
Старый 05.03.2015, 00:33   #4
min@y™
Цифровой кот
Старожил
 
Аватар для min@y™
 
Регистрация: 29.08.2014
Сообщений: 7,656
По умолчанию

Цитата:
Сообщение от planetoxod Посмотреть сообщение
Как вставить правильно код?
вот так
Изображения
Тип файла: jpg 7.jpg (8.8 Кб, 133 просмотров)
Расскажу я вам, дружочки, как выращивать грибочки: нужно в поле утром рано сдвинуть два куска урана...
min@y™ вне форума Ответить с цитированием
Старый 05.03.2015, 09:38   #5
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 19,042
По умолчанию

Где и как там сравниваются битмапы не показано, а приведенный фрагмент утечки вызывать не должен и не вызывает. Параметр r: Bitmap в процедурах зачем var-ом определен?
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 05.03.2015, 19:33   #6
planetoxod
Пользователь
 
Регистрация: 04.03.2015
Сообщений: 22
По умолчанию

Второй шок. Сейчас будут танцы с бубном. Буду ломать код.
planetoxod вне форума Ответить с цитированием
Ответ


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

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
TidHttp в потоке(утечка памяти) FLIER Работа с сетью в Delphi 9 30.10.2012 11:32
Утечка памяти при использовании DOM Ferrum26 Общие вопросы Delphi 4 13.08.2010 14:45
Indy в потоке - утечка памяти PUH Фриланс 5 28.12.2009 14:06
Indy в потоке - утечка памяти PUH Помощь студентам 0 25.12.2009 12:27
Утечка памяти при работе с GDI+ Ivan_32 Общие вопросы C/C++ 2 29.11.2009 00:12