Форум: "Прочее";
Текущий архив: 2015.12.20;
Скачать: [xml.tar.bz2];
Вниз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;
Скачать: [xml.tar.bz2];
Память: 0.48 MB
Время: 0.002 c