Control\CControlSystem: различия между версиями
(Новая страница: «{{NavBar|{{Системная иерархия:Реализация подсистемы управления}} \ CControlSystem}} {{co…») |
|||
Строка 3: | Строка 3: | ||
===Типы=== | ===Типы=== | ||
{{ | {{type_list_begin_old_1}} | ||
{{ | {{type_list_add_old_1|name_type|Тип имени элементов подсистемы управления. Наследуется из [[IControlSystem]].}} | ||
{{ | {{type_list_add_old_1|domain_name_type|Тип имени экземпляра подсистемы предметной области. Эквивалентно <tt>name_type</tt>}} | ||
{{ | {{type_list_add_old_1|process_name_type|Тип имени процесса моделирования. Эквивалентно <tt>name_type</tt>}} | ||
{{ | {{type_list_add_old_1|size_type|Целочисленный беззнаковый четырехбайтовый тип для описания размеров.}} | ||
{{ | {{type_list_end_old_1}} | ||
===Методы=== | ===Методы=== |
Текущая версия на 21:15, 3 декабря 2017
Класс, реализующий основные функции подсистемы управления. Всегда существует в единственном экземпляре. Доступ к методам осуществляется через интерфейсы IControlSystem, IControlSystemServerSide и IControlSystemDomainSide.
Типы
Тип | Описание |
---|---|
name_type | Тип имени элементов подсистемы управления. Наследуется из IControlSystem. |
domain_name_type | Тип имени экземпляра подсистемы предметной области. Эквивалентно name_type |
process_name_type | Тип имени процесса моделирования. Эквивалентно name_type |
size_type | Целочисленный беззнаковый четырехбайтовый тип для описания размеров. |
Методы

Единственный экземпляр класса CControlSystem осуществляет агрегирование других подсистем системы управления и предоставляет доступ к ним по запросу из-вне.
Агрегируемыми компонентами являются: один экземпляр подсистемы геометрического моделирования CGeometrySystem, хеш-таблицы (от имени) активных подсистем предметной области CDomainSystem и связынных с ними экземпляров балансировщика нагрузки CLoadBalancer, а также хеш-таблицы (от имени) активных (и, возможно, уже завершенных, но не закрытых) процессов моделирования. Доступ к этим подсистемам осуществляется строго через их интерфейсы (IGeometrySystem, IDomainSystem и ILoadBalancer соответственно).
Непосредственное хранение балансировщиков нагрузки и экземпляров подсистем предметной области осуществляется с помощью смарт-указателей со счетчиком ссылок std::shared_ptr на ILoadBalancer и на IDomainSystem. Такие указатели хранятся в таблице активных процессов вместе со ссылками на строки таблицы активных подсистем предметной области.
В свою очередь, таблица активных подсистем предметной области хранит указатели weak_ptr на те же экземпляры ILoadBalancer и IDomainSystem. Такие указатели не управляют временем жизни указываемых объектов.
Экземпляр подсистемы предметной области создается в таблице активных экземпляров при запуске процесса моделирования, т.е. при вызове StartSimulation, вместе с созданием экземпляра балансировщика нагрузки и внесением записи в таблицу активных процессов. Если на момент вызова StartSimulation указанный в запросе экземпляр подсистемы предметной уже зарегистрирован в таблице активных экземпляров, используется существующая запись, в которой счетчики ссылок на экземпляры подсистем инкрементируются. В любом случае (при условии успешной обработки запроса) создается новый процесс моделирования, запись о котором вносится в таблицу активных процессов.
При закрытии процесса вызовом CloseSimulation происходит закрытие процесса моделирования и удаление записи о нем из таблицы активных процессов. При этом счетчики ссылок на экземпляры балансироващика и подсистемы предметной области декрементируется. При достижении ими нуля, соответствующая запись таблицы активных подсистем предметной области, а также сами экземпляры подсистемы и связанного балансировщика удаляются.