Класс so_4::disp::qt_ui::dyn_coop_t

Граф наследования:so_4::disp::qt_ui::dyn_coop_t:

so_4::rt::dyn_agent_coop_t so_4::rt::agent_coop_t

Полный список членов класса


Подробное описание

Динамическая кооперация, в которую могут входить производные от QObject агенты.

Начиная с:
v.4.2.7 Агенты, производные от QObject (например, агенты-окна), не могут быть уничтожены в произвольный момент времени. Для их корректного уничтожения следует использовать метод QObject::deleteLater. Поэтому, производные от QObject агенты не могут регистрироваться в SObjectizer-е через стандартную динамическую кооперацию. Для таких агентов предназначена кооперация so_4::disp::qt_ui::dyn_coop_t. В своем методе deregistered() она проверят, производен ли агент от QObject. Если да, то для агента используется отложенное уничтожение через QObject::deleteLater. Если же агент не производен от QObject, то он уничтожается через обычный механизм уничтожения агентов динамической кооперацией.
Внимание:
Данный класс производен от стандартной динамической кооперации. Поэтому объекты этого класса должны создаваться исключительно через оператор new. И агенты, которые помещаются в данную кооперацию, должны быть созданы при помощи оператора new.
Примеры:

sample/qt_ring/main.cpp.


Открытые члены

 dyn_coop_t (so_4::rt::agent_t *agent)
 Конструктор для кооперации из одного агента.
 dyn_coop_t (const std::string &coop_name, so_4::rt::agent_t **coop_agents, size_t agent_count)
 Конструктор для кооперации из нескольких агентов.
virtual void deregistered (so_4::rt::impl::phys_coop_destroyer_t &dstr)
 Внутренний метод SObjectizer-a.

Закрытые типы

typedef so_4::rt::dyn_agent_coop_t base_type_t
 Псевдоним для базового типа.

Конструктор(ы)

so_4::disp::qt_ui::dyn_coop_t::dyn_coop_t ( so_4::rt::agent_t agent  ) 

Конструктор для кооперации из одного агента.

В качестве имени кооперации используется имя агента.

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

Аргументы:
agent  Единственный входящий в кооперацию агент.
Внимание:
объект должн быть создан оператором new.

so_4::disp::qt_ui::dyn_coop_t::dyn_coop_t ( const std::string &  coop_name,
so_4::rt::agent_t **  coop_agents,
size_t  agent_count 
)

Конструктор для кооперации из нескольких агентов.

Аргументы:
coop_name  Имя кооперации.
coop_agents  Указатели на агентов кооперации. Каждый элемент должен содержать корректный указатель на объект, созданный оператором new.

После завершения работы конструктора сам вектор может быть уничтожен, но все агенты должны существовать дольше, чем объект agent_coop_t.

agent_count  Количество элементов в coop_agents.


Методы

void so_4::disp::qt_ui::dyn_coop_t::deregistered ( so_4::rt::impl::phys_coop_destroyer_t dstr  )  [virtual]

Внутренний метод SObjectizer-a.

Информирование кооперации о том, что она была дерегистрирована.

Данная реализация вызывает у всех агентов метод so_handle_deregistration. После чего заносит в объект dstr указатели на сам объект-кооперацию и на все агенты, входящие в кооперацию.

Проходим по всем агентам кооперации и проверяем, производны ли они от QObject. Если да, то инициируем уничтожение через QObject::deleteLater(). В противном случае помещаем агента в dstr.

Переопределяет метод предка so_4::rt::dyn_agent_coop_t.

Перекрестные ссылки so_4::rt::impl::phys_coop_destroyer_t::add(), so_4::rt::dyn_agent_coop_t::agents_delivered_to_destroyer(), so_4::rt::dyn_agent_coop_t::deregistered(), so_4::rt::agent_coop_t::query_agent() и so_4::rt::agent_coop_t::size().


Документация по SObjectizer v.4.4 'Тебуломста'. Последние изменения: Thu Sep 18 10:26:48 2008. Создано системой  doxygen1.5.6 Intervale SourceForge.net Logo