crossplatform.ru

Здравствуйте, гость ( Вход | Регистрация )

 
Ответить в данную темуНачать новую тему
> Много сигналов и слотов и производительность
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  


Цитата(hoRUS @ 24.12.2011, 12:07) *
Добрый день!
Проблема такова: имеется большое количество однотипных объектов, которые связываются с некоторым объектом-диспетчером посредством сигналов и слотов (каждый объект может иметь несколько свзей с диспетчером, одинаковые сигналы объектов соединяются с одними и теми же слотами диспетчера). В каждый момент времени активным является лишь один объект, сигналы от других объектов, если они придут, должны игнорироваться. Объекты создаются на этапе инициализации диспетчера и уничтожаются при уничтожении диспетчера.
Что лучше для производительности:

a. создать все связи при создании объектов, сразу заблокироать их с помощью blockSignals() и разблокировать по мере необходимости (при активации объекта);
b. не создавать связи при создании объектов, а каждый раз при акивации связывать объект с диспетчером с помощью connect() и удалять связь деактивируемого объекта с помощью disconnect();
c. другие варианты ?

Заранее спасибо.


Если требуется высокая производительность, тогда для Qt в порядке падения производительности.

1. Реализация взаимодействия диспетчера и объектов через элементарные указатели, при необходимости с синхронизацией через QMutex или QReadWriteLock.
2. Реализация взаимодействия диспетчера и объектов через очередь сообщений (QEvent).
3. Реализация через сигнал-слот взаимодействие.
В этом случае вариант blockSignals() предпочтительнее, т.к. connect() и disconnect() очень ресурсоемкие.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение

Быстрый ответОтветить в данную темуНачать новую тему
Теги
Нет тегов для показа


1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0




RSS Текстовая версия Сейчас: 22.11.2024, 8:14