TTreeView - WARNING: TResourceCacheItem.IncreaseRefCount

Вопросы программирования и использования среды Lazarus.

Модератор: Модераторы

TTreeView - WARNING: TResourceCacheItem.IncreaseRefCount

Сообщение jakyro » 28.09.2016 08:38:45

Запускаю lazarus, по умолчанию создаётся проект "Приложение, с библиотекой LCL".
В проекте создана форма Form1. Выкладываю на форму TreeView, добавляю 1 или более элементов дерева.
Иду в параметры проекта, снимаю галочку "Графическое приложение Win32 (-WG)", жму "ОК" (Чтоб появилась консоль. Или так делать нельзя?).
Запускаю приложение. Начинаю изменять размеры формы или перемещать за экран, чтобы заставить TreeView перерисовываться, в консоль начинают выводиться следующие предупреждения:
Код: Выделить всё
WARNING: TResourceCacheItem.IncreaseRefCount 1000 TPenHandleCache
WARNING: TResourceCacheItem.IncreaseRefCount 10000 TPenHandleCache

В чём дело? Баг? Утечка?
Посмотрел на форуме, есть одна тема в которой упоминалось данное предупреждение, но там говорили на другую тему.

Сначала подумал, что может какие-то файлы lazarus поломались, удалил всё, переустановил, но результат тот же.
Проверил разные версии приложения 32 и 64, оба выводят эти предупреждения.
У меня стоит Windows 10, Lazarus 1.6, FPC 3.0.0.
Проверил на VM Win10 более старой версии, там тоже самое. Не проверял на других ОС (Так как других нет. Нужно качать, ставить).

Что делать, как исправлять?
Аватара пользователя
jakyro
новенький
 
Сообщения: 38
Зарегистрирован: 22.08.2016 08:04:21

Re: TTreeView - WARNING: TResourceCacheItem.IncreaseRefCount

Сообщение Лекс Айрин » 28.09.2016 09:32:18

Вообще, предупреждение не ошибка, а скорее напоминание, что, например, стрелять в ногу нежелательно. Консольные приложения как бы не должны иметь окна. В реальности могут, но лучше это делать средствами winAPI.

jakyro писал(а):В чём дело? Баг? Утечка?

дело в том, что для консольного и графического приложения разные прологи (подготовительные действия перед запуском собственно программы).
Аватара пользователя
Лекс Айрин
долгожитель
 
Сообщения: 5723
Зарегистрирован: 19.02.2013 16:54:51
Откуда: Волгоград

Re: TTreeView - WARNING: TResourceCacheItem.IncreaseRefCount

Сообщение Снег Север » 28.09.2016 09:44:18

jakyro писал(а):Или так делать нельзя?

Нельзя.
Аватара пользователя
Снег Север
долгожитель
 
Сообщения: 2993
Зарегистрирован: 27.11.2007 16:14:47

Re: TTreeView - WARNING: TResourceCacheItem.IncreaseRefCount

Сообщение jakyro » 28.09.2016 09:55:31

Лекс Айрин писал(а):Вообще, предупреждение не ошибка

Ну да, предупреждение, что в памяти плодятся ежесекундно десятки тысяч ссылок. Подумаешь...
А с ногой - неудачный пример. Это всё равно что "в ногу стрелять нежелательно, но тем не менее мы уже выстрелили 10000 раз".
Лекс Айрин писал(а):дело в том, что для консольного и графического приложения разные прологи (подготовительные действия перед запуском собственно программы).

А как мне убедиться, что тоже самого не происходит с включённым -WG? Консоли нет, предупреждение выводить некуда.
Может тоже самое происходит и в WG, только никуда не выводится?
Аватара пользователя
jakyro
новенький
 
Сообщения: 38
Зарегистрирован: 22.08.2016 08:04:21

Re: TTreeView - WARNING: TResourceCacheItem.IncreaseRefCount

Сообщение Снег Север » 28.09.2016 10:05:53

Зачем приложению windows консоль? Нормальное приложение пишет сообщения или в своем окне, или в лог.
Аватара пользователя
Снег Север
долгожитель
 
Сообщения: 2993
Зарегистрирован: 27.11.2007 16:14:47

Re: TTreeView - WARNING: TResourceCacheItem.IncreaseRefCount

Сообщение zub » 28.09.2016 10:11:19

>>А как мне убедиться
запустить с ключиком --debug-log=log.txt
zub
долгожитель
 
Сообщения: 2884
Зарегистрирован: 14.11.2005 23:51:26

Re: TTreeView - WARNING: TResourceCacheItem.IncreaseRefCount

Сообщение Лекс Айрин » 28.09.2016 10:14:37

jakyro писал(а): Подумаешь...


а может ты и хотел этого! Компы (да и компиляторы), в принципе, вещь тупая -- что попросишь, то и делают.

jakyro писал(а):А как мне убедиться, что тоже самого не происходит с включённым -WG?


ох уж это поколение большого пальца... по старинке... ShowMessage (intToStr(TResourceCacheItem.IncreaseRefCount)). Ну или в мемо загнать. Но думаю, что это бессмысленно -- если бы так тёк компонент, то приложение на глазах бы рухнуло.
Аватара пользователя
Лекс Айрин
долгожитель
 
Сообщения: 5723
Зарегистрирован: 19.02.2013 16:54:51
Откуда: Волгоград

Re: TTreeView - WARNING: TResourceCacheItem.IncreaseRefCount

Сообщение zub » 28.09.2016 10:15:07

и да. В личку мне никто ничего не скидывал((
А после той дискусии "чудохак" полюбому должен стать достоянием общественности
zub
долгожитель
 
Сообщения: 2884
Зарегистрирован: 14.11.2005 23:51:26

Re: TTreeView - WARNING: TResourceCacheItem.IncreaseRefCount

Сообщение jakyro » 28.09.2016 11:34:04

zub писал(а):и да. В личку мне никто ничего не скидывал((
А после той дискусии "чудохак" полюбому должен стать достоянием общественности

jakyro писал(а):Результаты проделанной месячной работы? А может тебе ещё чего написать?
По твоим утверждениям это "не возможно", следовательно ценность этого кода огромная. И как тебе пришло в голову, что я просто возьму и кину тебе готовый результат?



Снег Север писал(а):Зачем приложению windows консоль? Нормальное приложение пишет сообщения или в своем окне, или в лог.

Ну это типа и есть "лог, который выводится в консоль".
У многих приложений, игр есть подобный режим, запуском с консолью. Везде по своему реализована консоль.
Я вот и подумал, что в lazarus есть такая чудесная опция, которая реализовывает такой простенький вывод, но видимо нет.

Просто где-то прочитал следующее, думал не будет разницы, просто приложение запустится с выводом в консоль, но оказывается вот она разница, конфликты (наверно не для того опция предназначена, а возможно и для того, только криво реализована, баги).
скалогрыз писал(а):у меня язык чешется пофлудить на тему консоль-не консоль (и что разницы между ними нет), но не буду :D



Лекс Айрин писал(а):ох уж это поколение большого пальца... по старинке... ShowMessage (intToStr(TResourceCacheItem.IncreaseRefCount)). Ну или в мемо загнать. Но думаю, что это бессмысленно -- если бы так тёк компонент, то приложение на глазах бы рухнуло.

Поколение которое не выводит всё подряд в ShowMessage абы где и не загоняет в мемо, а пытается сделать это средствами библиотек, среды, отладчика? Действительно, странное поколение...
Ну и это процедура прибавления ссылки (название говорит само за себя), а не свойство. Нужно читать свойство ReferenceCount. А вот от куда читать - не знаю. Возможно где-то есть глобальная переменная с экземпляром класса, возможно оно где-то используется в TreeView, а возможно где-то ещё. Неудачно ты большим плацем в небо ткнул.


Ну буду надеяться на то, что действительно разные инистализации у проекта с -WG и без, и из-за этого всплывают подобные предупреждения, и типа при сборке с -WG не будет подобных скрытых предупреждений.
Аватара пользователя
jakyro
новенький
 
Сообщения: 38
Зарегистрирован: 22.08.2016 08:04:21

Re: TTreeView - WARNING: TResourceCacheItem.IncreaseRefCount

Сообщение Лекс Айрин » 28.09.2016 11:57:06

jakyro писал(а): а пытается сделать это средствами библиотек, среды, отладчика? Действительно, странное поколение...


Если бы он еще работал этот отладчик нормально... плюс, у отладчика есть много своих минусов.


jakyro писал(а):Ну и это процедура прибавления ссылки (название говорит само за себя), а не свойство. Нужно читать свойство ReferenceCount. А вот от куда читать - не знаю. Возможно где-то есть глобальная переменная с экземпляром класса, возможно оно где-то используется в TreeView, а возможно где-то ещё. Неудачно ты большим плацем в небо ткнул.


Это уже мелочи -- по конкретному месту легко подправить. А откуда именно читать есть подсказка и исходный код компонента.
Аватара пользователя
Лекс Айрин
долгожитель
 
Сообщения: 5723
Зарегистрирован: 19.02.2013 16:54:51
Откуда: Волгоград

Re: TTreeView - WARNING: TResourceCacheItem.IncreaseRefCount

Сообщение zub » 28.09.2016 12:09:39

Код: Выделить всё
WARNING: TResourceCacheItem.IncreaseRefCount 1000 TPenHandleCache
WARNING: TResourceCacheItem.IncreaseRefCount 10000 TPenHandleCache

Будет также и без консоли. разбирайся в чем дело и пиши багрепорт
zub
долгожитель
 
Сообщения: 2884
Зарегистрирован: 14.11.2005 23:51:26

Re: TTreeView - WARNING: TResourceCacheItem.IncreaseRefCount

Сообщение jakyro » 28.09.2016 12:12:10

zub писал(а):нда... чукча не читатель
superproga.exe --debug-log=log.txt

Я ведь не ты, я это прочитал... Просто это глупость.
Дело в том, что возможно при сборке с -WG вывод этих сообщений отрубается и то что нету ничего в логах - ничего не значт. Проверять нужно конкретно то, о чём говорилось в предупреждении.
Поколение "не большого пальца" написал примерно то что нужно, вот только предупреждение всё равно не получить, но ссылки проверить можно.
Аватара пользователя
jakyro
новенький
 
Сообщения: 38
Зарегистрирован: 22.08.2016 08:04:21

Re: TTreeView - WARNING: TResourceCacheItem.IncreaseRefCount

Сообщение zub » 28.09.2016 12:14:01

>>Просто это глупость.
Просто надо было попробовать а не умничать. За умного лучше молча прокатывать
zub
долгожитель
 
Сообщения: 2884
Зарегистрирован: 14.11.2005 23:51:26

Re: TTreeView - WARNING: TResourceCacheItem.IncreaseRefCount

Сообщение jakyro » 28.09.2016 12:18:06

zub писал(а):Просто надо было попробовать а не умничать. За умного лучше молча прокатывать

Я ведь попробовал. И ответил, что лог пустой.
Ты там не пытайся сойти за умного, а будь им.
-
Потому собственно и не принял это во внимание, так как вывод не работает, так как возможно эти предупреждения отключены при сборке без -WG, как я уже и сказал.
Последний раз редактировалось jakyro 28.09.2016 12:19:09, всего редактировалось 1 раз.
Аватара пользователя
jakyro
новенький
 
Сообщения: 38
Зарегистрирован: 22.08.2016 08:04:21

Re: TTreeView - WARNING: TResourceCacheItem.IncreaseRefCount

Сообщение zub » 28.09.2016 12:19:03

Подскажи почему у меня не пустой?
zub
долгожитель
 
Сообщения: 2884
Зарегистрирован: 14.11.2005 23:51:26

След.

Вернуться в Lazarus

Кто сейчас на конференции

Сейчас этот форум просматривают: Alex2013 и гости: 30

Рейтинг@Mail.ru