SObjectizer  5.1
Классы | Открытые члены | Открытые статические члены | Закрытые типы | Закрытые члены | Закрытые данные | Друзья | Полный список членов класса
Класс so_5::rt::agent_coop_t

Кооперация агентов. Подробнее...

Классы

struct  agent_with_disp_binder_t
 Агент и его привязка. Подробнее...
 

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

const std::string & query_coop_name () const
 Получить имя кооперации.
 
ret_code_t add_agent (const agent_ref_t &agent_ref)
 Добавить агента в кооперацию, владение агентом переходит к gent_coop_t. Подробнее...
 
ret_code_t add_agent (const agent_ref_t &agent_ref, disp_binder_unique_ptr_t disp_binder)
 Добавить агента в кооперацию с указанием привязки к конкретному дисптчеру, владение агентом переходит к agent_coop_t. Подробнее...
 

Открытые статические члены

static agent_coop_unique_ptr_t create_coop (const nonempty_name_t &name, disp_binder_unique_ptr_t &coop_disp_binder, impl::so_environment_impl_t &env_impl)
 Создание кооперации. Подробнее...
 
static void call_agent_finished (agent_coop_t &coop)
 
static void call_final_deregister_coop (agent_coop_t *coop)
 Выполнить окончательную дерегистрацию кооперации.
 

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

typedef std::vector
< agent_with_disp_binder_t
agent_array_t
 Тип для массива агентов c их привязками к диспетчерам.
 

Закрытые члены

 agent_coop_t (const nonempty_name_t &name, disp_binder_unique_ptr_t &coop_disp_binder, impl::so_environment_impl_t &env_impl)
 Конструктор кооперации. Подробнее...
 
void bind_agents_to_coop ()
 Привязать агентов к кооперации.
 
void define_all_agents ()
 Вызвать у всех агентов метод so_define_agent().
 
void undefine_all_agents ()
 Вызвать у всех агентов метод undefine_agent().
 
void undefine_some_agents (agent_array_t::iterator it)
 Вызвать у агентов undefine_agent(). Подробнее...
 
void bind_agents_to_disp ()
 Выполнить привязку агентов к диспетчерам.
 
void unbind_agents_to_disp (agent_array_t::iterator it)
 Отвязать агентов от диспетчеров. Подробнее...
 
void agent_finished ()
 Отметить, что очередной агент кооперации, завершил работу. Подробнее...
 
void final_deregister_coop ()
 Выполнить окончательную дерегистрацию кооперации.
 

Закрытые данные

const std::string m_coop_name
 Имя кооперации.
 
ACE_Thread_Mutex & m_lock
 Мутекс для синхронизации операций над кооперацией.
 
bool m_agents_are_undefined
 Флаг того, что агенты кооперации разопределены.
 
disp_binder_ref_t m_coop_disp_binder
 Привязка к диспетчеру для агентов коопераций по-умолчанию.
 
agent_array_t m_agent_array
 Массив агентов кооперации.
 
impl::so_environment_impl_tm_so_environment_impl
 Реализация среды so_5.
 
atomic_counter_t m_working_agents_count
 Количество работающих агентов.
 

Друзья

class agent_t
 
class impl::agent_core_t
 

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

Кооперация агентов.

Служит для объединения несольких агентов, как одной рабочей единицы SObjectizer. При регистрации кооперации все агенты должны быть зарегистрированы, иначе регистрация кооперации не состоиться. Агенты добавляются в кооперацию через метод кооперации add_agent(). При добавлении агента в кооперацию ей передается владение этим агентом.

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

so_5::rt::agent_coop_t::agent_coop_t ( const nonempty_name_t name,
disp_binder_unique_ptr_t coop_disp_binder,
impl::so_environment_impl_t env_impl 
)
private

Конструктор кооперации.

Аргументы
nameИмя кооперации.
coop_disp_binderПривязка к диспетчеру для агентов коопераций по-умолчанию.
env_implРеализация среды so_5.

Используется в create_coop().

Методы

ret_code_t so_5::rt::agent_coop_t::add_agent ( const agent_ref_t agent_ref)

Добавить агента в кооперацию, владение агентом переходит к gent_coop_t.

Аргументы
agent_refАгент.

Перекрестные ссылки m_agent_array и m_coop_disp_binder.

ret_code_t so_5::rt::agent_coop_t::add_agent ( const agent_ref_t agent_ref,
disp_binder_unique_ptr_t  disp_binder 
)

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

Если агент, добавляемый в кооперацию, должен иметь привязку к диспетчеру отличную от привязки всей кооперации, то используется этот метод, параметр disp_binder которого определяет специфичного для данного агента привязывателя.

Аргументы
agent_refАгент.
disp_binderОбъект для привязки к диспетчеру.

Перекрестные ссылки m_agent_array и so_5::rc_coop_has_references_to_null_agents_or_binders.

void so_5::rt::agent_coop_t::agent_finished ( )
private

Отметить, что очередной агент кооперации, завершил работу.

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

Перекрестные ссылки m_so_environment_impl, m_working_agents_count и so_5::rt::impl::so_environment_impl_t::ready_to_deregister_notify().

agent_coop_unique_ptr_t so_5::rt::agent_coop_t::create_coop ( const nonempty_name_t name,
disp_binder_unique_ptr_t coop_disp_binder,
impl::so_environment_impl_t env_impl 
)
static

Создание кооперации.

Аргументы
nameИмя кооперации.
coop_disp_binderПривязка к диспетчеру для агентов коопераций по-умолчанию.
env_implРеализация среды so_5 в рамках которой создается кооперация.

Перекрестные ссылки agent_coop_t().

Используется в so_5::rt::so_environment_t::create_coop().

void so_5::rt::agent_coop_t::unbind_agents_to_disp ( agent_array_t::iterator  it)
inlineprivate

Отвязать агентов от диспетчеров.

Аргументы
itИтератор на агента всех предшественников которого надо отвязать от лиспетчеров.

Перекрестные ссылки m_agent_array и m_so_environment_impl.

Используется в bind_agents_to_disp() и final_deregister_coop().

void so_5::rt::agent_coop_t::undefine_some_agents ( agent_array_t::iterator  it)
private

Вызвать у агентов undefine_agent().

Аргументы
itИтератор на агента у всех предшественников которого надо вызывать undefine_agent().

Перекрестные ссылки m_agent_array, m_agents_are_undefined и m_lock.

Используется в define_all_agents() и undefine_all_agents().


Документация по SObjectizer v.5.1 'Джимара'. Последние изменения: Ср 15 Май 2013 12:56:22. Создано системой  doxygen1.8.3.1 Intervale SourceForge.net Logo