Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C++ Builder > Как лучше организовать отслеживание живых форм?


Автор: ZVano 18.4.2011, 15:16
Топик создан в связи с отклонением от темы http://forum.vingrad.ru/forum/topic-327143/kw-dynamic-cast.html.
Давайте обсудим как лучше организовать программу-оболочку, чтобы ядро знало какие формы определенных классов живы.

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

// В ядре заводим глобалную переменную "список форм"
set<TForm*> active_forms;
set<TForm*> active_forms_class2;
//...


// В конструкторы всех форм, которые используются в приложении (и нуждаются в помещении в список), добавляем  следующую строчку
active_rorms.insert(this);

// А в деструктор - такую строчку
active_forms.erase(this);


// Везде, где нужно проверить жива ли форма пищем следующее:
// Проверка валидности формы -
if (active_forms.count(<form ptr>)!=0) ... // Валидна


Достоинства: 
* максимальное быстродействие; 
* при правильном использовании гарантируется достоверность информации.
Недостатки: 
* необходимо в конструктор\деструктор всех форм вставлять строчки добавления\удаления указателей форм в "active_forms".
* информация недостоверна, если программист забыл добавить строчки в конструктор\деструктор.

2. Подход 1 с той разницей, что программистом создается форма-шаблон, от которой наследуются все остальные формы.
Достоинства: те же, что у подхода 1.
Недостатки: ?Вроде, нет?

3. Мониторинг форм.
По таймеру мониторить все формы, по косвенным признакам определять класс.
На основе полученой информации обновлять списки указателей на формы.

Достоинства: 
* при создании форм не нужно следовать определенной схеме (как в методе 1)
* метод не зависит от ошибок программистов (как в методе 1)
* форма не обязана быть наследником от какого-то класса (как в методе 2). В класс предка можно поместить что-то более полезное.
* метод гарантирует достоверность информации на момент последнего сканирования (при условии, что эту информацию можно получить)

Недостатки: 
* информация достоверна на момент последнего сканирования.
* расход ресурсов на постоянный мониторинг
* способ неработоспособен, если форма не имеет признаков, по которым можно определить ее класс.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)