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


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

Диспетчер для Qt.

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


Классы

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

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

namespace  impl
 Детали реализации диспетчера для Qt.

Функции

so_4::rt::dispatcher_tcreate_disp (so_4::rt::dispatcher_t *subordinate_disp, unsigned short qt_event_delta=17680)
 Создание диспетчера.
so_4::rt::agent_traits_tquery_gui_thread_traits ()
 Получить свойство, указывающее, что агент должен работать на нити Qt GUI.


Функции

so_4::rt::dispatcher_t * so_4::disp::qt_ui::create_disp ( so_4::rt::dispatcher_t subordinate_disp,
unsigned short  qt_event_delta = 17680 
)

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

Начиная с:
v.4.2.6.1
Диспетчер обслуживает только агентов, которые должны работать на GUI-нити. Остальных агентов и нить таймера должен обслуживать дополнительный диспетчер, которые передается диспетчеру для Qt в качестве параметра:
// Основным является диспетчер для Qt,
// подчиненным -- диспетчер с активными группами, для которого
// подчиненным является диспетчер с активными объектами.
std::auto_ptr< so_4::rt::dispatcher > disp(
  so_4::disp::qt_ui::create_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 ) ) ) );

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

Формирование уникальных идентификаторов для объектов QEvent.
Для доставки событий агентов на контекст главной нити используются объекты QEvent. Все подобные объекты должны иметь уникальный идентификатор типа. Qt указывает, что данный идентификатор должен формироваться как QEvent::User + delta. Значение delta выбирается программистом, поэтому возможны проблемы, если данный диспетчер будет использовать значение, совпадающее со значением в прикладном приложении. Для преодоления данных проблем диспетчер для Qt позволяет указать, какое значение delta должно использоваться. Для этого предназначен необязательный аргумент qt_event_delta.
Возвращает:
Указатель на динамически созданный объект, который должен быть уничтожен посредством оператора delete.
Внимание:
Данный диспетчер спроектирован так, чтобы в программе был только один диспетчер этого типа.
Аргументы:
subordinate_disp  Подчиненный диспетчер.
qt_event_delta  Значение для формирования идентификатора для объектов типа QEvent.
Примеры:
sample/qt_ring/main.cpp и sample/qt_ui/main.cpp.

so_4::rt::agent_traits_t & so_4::disp::qt_ui::query_gui_thread_traits (  ) 

Получить свойство, указывающее, что агент должен работать на нити Qt GUI.

Начиная с:
v.4.2.6.1
Для того, чтобы агент работал на нити Qt GUI в список его свойств необходимо поместить ссылку на возвращаемое данной функцией свойство.

Пример применения:

class my_agent_t
  : public QWidget,
    public so_4::rt::agent_t
{
  typedef so_4::rt::agent_t so_base_type_t;
  Q_OBJECT
  public :
    my_agent_t( const std::string & agent_name )
    :
      QWidget(), // какие-то параметры для QWidget...
      so_base_type_t( agent_name )
    {
      so_add_traits(
        so_4::disp::qt_ui::query_gui_thread_traits() );
    }
  ...
};
Примеры:
sample/qt_ring/main.cpp и sample/qt_ui/main.cpp.


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