Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2015.12.20;
Скачать: CL | DM;

Вниз

VCL кконтролы. Рушится шрифт.   Найти похожие ветки 

 
Andy BitOff ©   (2015-04-24 15:48) [0]

Может кто сталкивался. После некоторого времени работы с программой, рушатся шрифты.

Вот скрин нормальной работы
http://s7.postimg.org/sfjjdnfgr/norm.jpg

А вот после сбоя
http://s4.postimg.org/cd2f4m3y5/bug.jpg

Даже не представляю куда копать, из-за чего это может происходить. Память не течет, хендлы тоже. ХЗ просто.


 
Rouse_ ©   (2015-04-24 15:56) [1]

Эт не шрифты, это у тебя с GDI проблемы. Проверь на наличие утечки GDI хэндлов в процесс мониторе. Скорее всего пропустил где-то парный SelectObject().


 
Rouse_ ©   (2015-04-24 15:57) [2]

ЗЫ, ну либо второй вариант - через чур много GDI объектов создал (они ограничены).


 
Andy BitOff ©   (2015-04-24 16:00) [3]

Нет GDI хендлы не текут. Проверял. Стабильно примерно 1000, а ограничение на 10000.


 
Rouse_ ©   (2015-04-24 16:01) [4]

Значит порушил DC через SelectObject


 
Andy BitOff ©   (2015-04-24 16:07) [5]

До начала работы
http://i.imgur.com/uR4PRON.png

После сбоя
http://i.imgur.com/eziF9hC.png


 
Rouse_ ©   (2015-04-24 16:14) [6]

Ты не общие данные дай, а данные по процессу


 
DVM ©   (2015-04-24 16:18) [7]

Выбрали новый шрифт в DC, а старый, который был там до этого уничтожили, потом выбрали обратно уничтоженный - будет как раз такая картина. И утечек не будет.
Баги это в программе, где то затирается память.


 
Andy BitOff ©   (2015-04-24 16:35) [8]


> Rouse_ ©   (24.04.15 16:14) [6]
>
> Ты не общие данные дай, а данные по процессу

Это для процесса. Это вкладка Performance для процесса из ProcessExplorer"а


 
Andy BitOff ©   (2015-04-24 16:36) [9]


> DVM ©   (24.04.15 16:18) [7]

Да, интересно. Надо посмотреть. Есть подозрения, на любителей хранить в переменных полученные DC и объекты из SelectObject.


 
Rouse_ ©   (2015-04-24 16:42) [10]


> Это для процесса. Это вкладка Performance для процесса из
> ProcessExplorer"а

А, ну туда не лазил, достаточно было обычного таксмона :)
Ну тогда да - единственный варинат, именно битый DC посредством SelectObject.


 
mike-d ©   (2015-04-24 17:20) [11]

Скрины из первого поста очень похожи на проблему с kb3013455
http://answers.microsoft.com/ru-ru/windows/forum/windows_vista-windows_update/%D0%B8%D1%81%D0%BF%D0%BE%D1%80%D1%87%D0%B5%D0%BD/5ac53682-218c-43e1-95b8-9b23e080ee43


 
Дмитрий С ©   (2015-04-24 17:40) [12]

Проверил, действительно так происходит


unit Unit1;

interface

uses
 Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,
 Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.StdCtrls;

type
 TForm1 = class(TForm)
   Edit1: TEdit;
   Button1: TButton;
   procedure Button1Click(Sender: TObject);
 private
   { Private declarations }
 public
   { Public declarations }
 end;

var
 Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
begin
 DeleteObject(Font.Handle);
end;

end.


 
Eraser ©   (2015-04-24 18:36) [13]


> Andy BitOff ©   (24.04.15 15:48) 

где-нибудь не в основном потоке есть работа с графикой через VCL классы типа tbitmap?


 
Andy BitOff ©   (2015-04-24 18:42) [14]


> Eraser ©   (24.04.15 18:36) [13]

Если честно, то фиг знает, очень много кода, но скорее всего нет. Пока нашел некорректную работу с DC и объектами от SelectObject поправлю там потом будем дальше посмотреть.


 
Rouse_ ©   (2015-04-24 18:51) [15]


> Andy BitOff ©   (24.04.15 18:42) [14]
>
> > Eraser ©   (24.04.15 18:36) [13]
>
> Если честно, то фиг знает, очень много кода, но скорее всего
> нет. Пока нашел некорректную работу с DC и объектами от
> SelectObject поправлю там потом будем дальше посмотреть.
>

Отследить неверную работу с данной АПИ достаточно просто, сделай новую папку, туда перетащи юнит в котором обьявлена SelectObject, данный юнит в нстройках среды обьяви самым первым.
После чего напиши шлюз, чтобы его вызывали, вместо нативной SelectObject, внутри которого вызывай оригинальную функцию.
Добавь логирование - запусти проект и проверь, что и как там все происходит.
Бо глазками ты устанешь все проверять.


 
Andy BitOff ©   (2015-04-24 19:01) [16]

Да, похоже ошибка найдена.

Закоментировал все (3) DeleteObject в подозрительном месте - баг изчез, но текут гди хендлы. Но тут уже ясно и понятно что делать, надо переписывать.

Виноваты во всем, как и предполагалось, любители сохранять DC и объекты из SelectObject, которые не понимают чего делают :) Приходится ходить за ними и подтирать.

Всем большое спасибо. Если чо, еще напишу ;)



Страницы: 1 вся ветка

Текущий архив: 2015.12.20;
Скачать: CL | DM;

Наверх




Память: 0.5 MB
Время: 0.006 c
2-1403699566
CodeDrunk
2014-06-25 16:32
2015.12.20
Проектирование БД


15-1423150223
Дмитрий С
2015-02-05 18:30
2015.12.20
Midi 2 Beep-код


2-1403765627
Вася
2014-06-26 10:53
2015.12.20
Раскраска строк DBGrid относительно значения поля текущей строки


2-1403613872
Dennis I. Komarov
2014-06-24 16:44
2015.12.20
function Format


15-1429741804
Юрий
2015-04-23 01:30
2015.12.20
С днем рождения ! 23 апреля 2015 четверг