Гость
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Утечка HBRUSH / 4 сообщений из 4, страница 1 из 1
24.02.2022, 17:50
    #40136285
hlopotun
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Утечка HBRUSH
Всем доброго дня,

ест форма отображающая progressbar написанный при царе горохе.
Этот код приводит к утечке HBRUSH, далее по стеку:
Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
//........................................... Свой код
procedure TMYProgressHandler.UpdateProgress (APrompt1, APrompt2: string;
  AValue: integer; AAbsolutePosition: boolean);
begin
  if AAbsolutePosition then
    Position := AValue  //<----- тут
    else
    if AValue < 0 then
   .................
//............................................................... Свой код
procedure TMYProgressHandler.SetInteger;
begin
  if FProgressbar <> nil then
    case Index of
      1 : FProgressbar.Step := Value;
      2 : FProgressbar.Min := Value;
      3 : FProgressbar.Max := Value;
      4 : begin
           FProgressbar.Position := Value;
           if FForm <> nil then FForm.Update; //<--- далее тут где FForm это TForm
           end;
      end;
//............................................................... vcl.controls
procedure TWinControl.Update;
begin
  if HandleAllocated then UpdateWindow(WindowHandle); // далее тут
end;
//..................................................
// далее разные переходы в vsl.*
//.................................................. vcl.gaphics
function TBrush.GetHandle: HBrush;
var
  LogBrush: TLogBrush;
........................
Handle := CreateBrushIndirect(LogBrush); // <--- и в конце тут



подозреваю что надо тут FForm.Update что то менять,
как с таким у формы можно бороться?

Спасибо
...
Рейтинг: 0 / 0
24.02.2022, 18:03
    #40136287
hlopotun
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Утечка HBRUSH
тут написано что надо вызвать deleteobject. Но поскольку всё происходит внутри VCL то возможно удалять надо до вызова FForm.Update.
Не совсем понятно как.
...
Рейтинг: 0 / 0
25.02.2022, 01:13
    #40136321
527470
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Утечка HBRUSH
hlopotun,

В VCL несколько кривая (закрытая и никак не модифицируемая) реализация кистей, но утечка явно не тут, а там где вы как-то меняете кисти у контролов.

TBrush.GetHandle возвращает хендлер, который освободится когда эта кисть никем не будет использоваться. VCL имеет список всех объектов кистей и TBrush лишь обёртка над этим объектом несколько TBrush могут держать одну и туже реальную кисть.
...
Рейтинг: 0 / 0
25.02.2022, 10:23
    #40136344
kealon(Ruslan)
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Утечка HBRUSH
527470,
+1

hlopotun,
а вы его случайно не из потока вызываете?
...
Рейтинг: 0 / 0
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Утечка HBRUSH / 4 сообщений из 4, страница 1 из 1
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]