Russian Qt Forum
Сентябрь 29, 2024, 00:34 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: Статистика shared  (Прочитано 4568 раз)
Igors
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 11445


Просмотр профиля
« : Апрель 25, 2012, 14:13 »

Добрый день

Меня вполне устраивает любое shared (хоть implicit), но нередко я не хочу или не могу пускать дело на самотек, надеясь что объект когда-нибудь да удалится. Нужно/хотелось бы иметь ф-цию печатающую статистику, примерно так
Цитировать
MyClass objects 10   // всего сейчвс 10 экземпляров MyClass

[ 0 ] "Image1.png", 4 referenced (0xabcd1234, 0xabcd1238...)
...
[ 9 ] "ImageXXX.png", 1 referenced (0xabcd1234)
Т.е. по каждому экземпляру - кол-во ссылающихся и их адреса. Ну + какая-то информация об экземпляре (напр имя имеджа)

Как это сделать? Помогут ли "умные указатели" - или они не так уж умны?  Улыбающийся

Спасибо
Записан
Akon
Гость
« Ответ #1 : Апрель 25, 2012, 14:57 »

Т.е. нужно добраться до счетчика ссылок, а-ля boost::shared_ptr<T>::use_count()?
Нужно посмотреть сорцы кьютейных классов - может быть имеется какой-нибудь паблик доступ.
Записан
Igors
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 11445


Просмотр профиля
« Ответ #2 : Апрель 25, 2012, 18:08 »

Т.е. нужно добраться до счетчика ссылок, а-ля boost::shared_ptr<T>::use_count()?
Нужно посмотреть сорцы кьютейных классов - может быть имеется какой-нибудь паблик доступ.
Отсутствует, не вижу даже как получить счетчик ссылок. Не говоря уже о том что его недостаточно, надо знать ссылающихся (кто держит).

Конечно средствами языка это сделать не так уж сложно, но как же так: и то хорошее, и это мощное - а чуть более сложная задача - и что, "даешь велосипед"?  Получается что расширяемость всех тех прибамбасов нулевая? Как-то не по-хозяйски  Плачущий
Записан
navrocky
Гипер активный житель
*****
Offline Offline

Сообщений: 817


Погроммист


Просмотр профиля
« Ответ #3 : Апрель 25, 2012, 23:33 »

Ссылающихся ты точно не получишь, а счетчик можно вытянуть при желании. Для тебя единственный подходящий вариант - пропатчить Qt под свои нужды.
Записан

Гугль в помощь
Igors
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 11445


Просмотр профиля
« Ответ #4 : Апрель 26, 2012, 10:31 »

Ссылающихся ты точно не получишь, а счетчик можно вытянуть при желании. Для тебя единственный подходящий вариант - пропатчить Qt под свои нужды.
А как Вы себе это представляете? В смысле как в итоге должен выглядеть пропатченый класс(ы) (и какие?) чтобы я мог получить ссылающихся?
Записан
Akon
Гость
« Ответ #5 : Апрель 26, 2012, 13:03 »

Малоинвазивное решение: добавьте в счетчик коллбеки с необходимой информацией на attach/detach. На этом патчинг Qt закончен. Далее в коллбеках (пользовательский код) делайте, что угодно, в частности, ведите учет клиентов шареных данных.
Записан
Igors
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 11445


Просмотр профиля
« Ответ #6 : Апрель 27, 2012, 16:57 »

Малоинвазивное решение: добавьте в счетчик коллбеки с необходимой информацией на attach/detach. На этом патчинг Qt закончен. Далее в коллбеках (пользовательский код) делайте, что угодно, в частности, ведите учет клиентов шареных данных.
Конечно хотелось бы использовать уже имеющиеся классы, но это не самоцель. Я бы хотел крутить примерно так (псевдокод)
Код
C++ (Qt)
CSharedResource <QImage> theResource(new QImage(), this);   // новый ресурс. пока 1 user (this)
..
theResource.Attach2User(this);  // еще 1 user
theResource.DetachFromUser(this);  // user освободил
..
theResource.ContentChanged();  // имедж изменился, ссылающиеся должны это учесть (напр перерисовать UI)
..
theResource.Release();  // имедж будет удален, сообщаем ссылающимся
..
theResource.Hand2Hand(oldUser. newUser);  
theResource.CanBeReleased();  // и.т.д.
 
Т.е. не просто мельтешить с тем shared (в целях обучения программированию) а по делу
Записан
navrocky
Гипер активный житель
*****
Offline Offline

Сообщений: 817


Погроммист


Просмотр профиля
« Ответ #7 : Апрель 27, 2012, 17:10 »

Т.е. поиск подвисших кутэшных шаренных объектов в существующем коде не ваша цель?

Тогда что вам мешает сделать такую обвертку?
Записан

Гугль в помощь
Igors
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 11445


Просмотр профиля
« Ответ #8 : Апрель 27, 2012, 17:32 »

Т.е. поиск подвисших кутэшных шаренных объектов в существующем коде не ваша цель?
Пока не вижу как использовать "кутэшные шаренные" - необходимость что-то патчить уже достаточно неприятна, да и решается лишь одна, частная задача

Тогда что вам мешает сделать такую обвертку?
Ничто, просто хочу посоветоваться с людями  Улыбающийся
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.217 секунд. Запросов: 23.