Пространство имен so_4::disp::active_group


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

Диспетчер с активными группами.

Начиная с:
v.4.2.6


Пространства имен

namespace  impl
 Детали реализации диспетчера с активными группами.

Функции

so_4::rt::dispatcher_tcreate_disp (so_4::rt::dispatcher_t *subordinate_disp)
 Создание диспетчера.
so_4::rt::agent_traits_tcreate_active_group_traits (const std::string &group_name)
 Получить свойство, делающее агента членом активной группы.
void make_member (so_4::rt::agent_t &agent, const std::string &group_name)
 Упрощенный способ сделать агента членом активной группы.


Функции

so_4::rt::agent_traits_t * so_4::disp::active_group::create_active_group_traits ( const std::string &  group_name  ) 

Получить свойство, делающее агента членом активной группы.

Начиная с:
v.4.2.6
Для того, чтобы сделать агент членом активной группы необходимо поместить в список свойств объекта (agent_traits) указатель на специальное свойство, которое создается данной функцией.

Внимание:
Полученное с помощью данного метода свойство должно назначаться агенту ТОЛЬКО с помощью метода so_4::rt::agent_t::so_add_destroyable_traits(), т.к. свойство является динамически созданным объектом.
Возвращает:
Указатель на динамически созданный объект, который должен быть уничтожен посредством delete.
Пример применения:
class my_agent_t : public so_4::rt::agent_t {
  typedef so_4::rt::agent_t base_type_t;

  public :
    my_agent_t( const char * agent_name ) :
      base_type_t( agent_name )
    {
      so_add_destroyable_traits(
        so_4::disp::active_group::create_active_group_traits(
          "my_active_group" ) );
    }
  ...
};
Аргументы:
group_name  Имя активной группы, в составе которой должен работать агент.

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

so_4::rt::dispatcher_t * so_4::disp::active_group::create_disp ( so_4::rt::dispatcher_t subordinate_disp  ) 

Создание диспетчера.

Начиная с:
v.4.2.6
Диспетчер обслуживает только агентов, которые входят в активные группы. Остальных агентов и нить таймера должен обслуживать дополнительный диспетчер, которые передается диспетчеру с активными группами в качестве параметра:
// Основным является диспетчер с активными группами,
// подчиненным -- диспетчер с активными объектами.
std::auto_ptr< so_4::rt::dispatcher > disp(
  so_4::disp::active_group::create_disp(
    so_4::disp::active_obj::create_disp(
      // Таймер будет уничтожен диспетчером.
      so_4::timer_thread::simple::create_timer_thread(),
      so_4::auto_destroy_timer ) ) );
либо:
// Основным является диспетчер с активными группами,
// подчиненным -- диспетчер с одной рабочей нитью.
std::auto_ptr< so_4::rt::dispatcher > disp(
  so_4::disp::active_group::create_disp(
    so_4::disp::one_thread::create_disp(
      // Таймер будет уничтожен диспетчером.
      so_4::timer_thread::simple::create_timer_thread(),
      so_4::auto_destroy_timer ) ) );

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

Возвращает:
Указатель на динамически созданный объект, который должен быть уничтожен посредством оператора delete.
Внимание:
Данный диспетчер спроектирован так, чтобы в программе был только один диспетчер этого типа.
Аргументы:
subordinate_disp  Подчиненный диспетчер.

void so_4::disp::active_group::make_member ( so_4::rt::agent_t agent,
const std::string &  group_name 
) [inline]

Упрощенный способ сделать агента членом активной группы.

Начиная с:
v.4.2.7 Пример использования:
class my_agent_t : public so_4::rt::agent_t {
  typedef so_4::rt::agent_t base_type_t;

  public :
    my_agent_t( const char * agent_name ) :
      base_type_t( agent_name )
    {
      so_4::disp::active_group::make_member(
        *this, "my_active_group" );
    }
  ...
};

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


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