Много сигналов и слотов и производительность |
Здравствуйте, гость ( Вход | Регистрация )
Много сигналов и слотов и производительность |
hoRUS |
24.12.2011, 11:07
Сообщение
#1
|
Студент Группа: Участник Сообщений: 30 Регистрация: 10.7.2008 Из: Москва Пользователь №: 231 Спасибо сказали: 5 раз(а) Репутация: 0 |
Добрый день!
Проблема такова: имеется большое количество однотипных объектов, которые связываются с некоторым объектом-диспетчером посредством сигналов и слотов (каждый объект может иметь несколько свзей с диспетчером, одинаковые сигналы объектов соединяются с одними и теми же слотами диспетчера). В каждый момент времени активным является лишь один объект, сигналы от других объектов, если они придут, должны игнорироваться. Объекты создаются на этапе инициализации диспетчера и уничтожаются при уничтожении диспетчера. Что лучше для производительности: a. создать все связи при создании объектов, сразу заблокироать их с помощью blockSignals() и разблокировать по мере необходимости (при активации объекта); b. не создавать связи при создании объектов, а каждый раз при акивации связывать объект с диспетчером с помощью connect() и удалять связь деактивируемого объекта с помощью disconnect(); c. другие варианты ? Заранее спасибо. |
|
|
ssoft |
26.12.2011, 7:55
Сообщение
#2
|
Участник Группа: Участник Сообщений: 130 Регистрация: 17.2.2010 Из: Москва Пользователь №: 1470 Спасибо сказали: 30 раз(а) Репутация: 3 |
Добрый день! Проблема такова: имеется большое количество однотипных объектов, которые связываются с некоторым объектом-диспетчером посредством сигналов и слотов (каждый объект может иметь несколько свзей с диспетчером, одинаковые сигналы объектов соединяются с одними и теми же слотами диспетчера). В каждый момент времени активным является лишь один объект, сигналы от других объектов, если они придут, должны игнорироваться. Объекты создаются на этапе инициализации диспетчера и уничтожаются при уничтожении диспетчера. Что лучше для производительности: a. создать все связи при создании объектов, сразу заблокироать их с помощью blockSignals() и разблокировать по мере необходимости (при активации объекта); b. не создавать связи при создании объектов, а каждый раз при акивации связывать объект с диспетчером с помощью connect() и удалять связь деактивируемого объекта с помощью disconnect(); c. другие варианты ? Заранее спасибо. Если требуется высокая производительность, тогда для Qt в порядке падения производительности. 1. Реализация взаимодействия диспетчера и объектов через элементарные указатели, при необходимости с синхронизацией через QMutex или QReadWriteLock. 2. Реализация взаимодействия диспетчера и объектов через очередь сообщений (QEvent). 3. Реализация через сигнал-слот взаимодействие. В этом случае вариант blockSignals() предпочтительнее, т.к. connect() и disconnect() очень ресурсоемкие. |
|
|
Текстовая версия | Сейчас: 25.11.2024, 19:14 |