Russian Qt Forum
Ноябрь 26, 2024, 16:48 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1] 2   Вниз
  Печать  
Автор Тема: Как испустить одиночный сигнал не соединяя sender-receiver ?  (Прочитано 10655 раз)
niXman
Гость
« : Ноябрь 30, 2009, 04:26 »

Привет.

Как можно это сделать?
Есть сложная сеть соединений. Связи в которой создаются динамически, для единственной "вспышки". Так вот, на соединение сигналов и слотов, затрачивается много времени. Но, так как жизнь каждого соединения менее секунды, интересует, можно ли их не соединять? Возможно есть какой-то не столь ресурсоемкий способ?

Спасибо за внимание.
Записан
spectre71
Гость
« Ответ #1 : Ноябрь 30, 2009, 10:48 »

Привет.

Как можно это сделать?
Есть сложная сеть соединений. Связи в которой создаются динамически, для единственной "вспышки". Так вот, на соединение сигналов и слотов, затрачивается много времени. Но, так как жизнь каждого соединения менее секунды, интересует, можно ли их не соединять? Возможно есть какой-то не столь ресурсоемкий способ?

Спасибо за внимание.

В общем случае оптимизировать не получится.
Необходимо знать ограничения задачи.
Опиши подробнее.
Записан
Igors
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 11445


Просмотр профиля
« Ответ #2 : Ноябрь 30, 2009, 11:43 »

Интересно но нужны подробности. Если "менее секунды" - то проблемы нет, слот/сигнал подходит. Если "менее миллисекунды" - тогда (возможно) это проблема
Записан
spectre71
Гость
« Ответ #3 : Ноябрь 30, 2009, 11:54 »

Интересно но нужны подробности. Если "менее секунды" - то проблемы нет, слот/сигнал подходит. Если "менее миллисекунды" - тогда (возможно) это проблема

Не совсем правильно. Говорилось о времени жизни одного соединения, но ничего о частоте соединений.
Например новое соединение будет происходить раз в миллисикунду и существовать в среднем секунду.
Записан
lit-uriy
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 3880


Просмотр профиля WWW
« Ответ #4 : Ноябрь 30, 2009, 14:14 »

тему было бы корректнее назвать "как передать сигнал...", так как послать его можно вообще ни с чем не соединяя.
Записан

Юра.
BRE
Гость
« Ответ #5 : Ноябрь 30, 2009, 14:20 »

тему было бы корректнее назвать "как передать сигнал...", так как послать его можно вообще ни с чем не соединяя.
На ум приходит bool QMetaObject::invokeMethod
Записан
niXman
Гость
« Ответ #6 : Ноябрь 30, 2009, 14:27 »

Ребята, это не обыкновенная нейронная сеть. Соединения устанавливаются перед "вспышкой", т.е. организация. Вот на этот этап уходит много времени. Кол-во нейронов, колеблется от 128к до 1024к. Сеть отрабатывает быстрее чем время на организацию.
Отсюда и мысль, что на соединение тратиться больше ресурсов чем на работу, значит нужно искать менее ресурсоемкий подход.
Записан
spectre71
Гость
« Ответ #7 : Ноябрь 30, 2009, 14:32 »

Ребята, это не обыкновенная нейронная сеть. Соединения устанавливаются перед "вспышкой", т.е. организация. Вот на этот этап уходит много времени. Кол-во нейронов, колеблется от 128к до 1024к. Сеть отрабатывает быстрее чем время на организацию.
Отсюда и мысль, что на соединение тратиться больше ресурсов чем на работу, значит нужно искать менее ресурсоемкий подход.

А зачем тебе в данной задаче использовать QT механизм сигнал/слот? В данном случае это очень плохое решение.
Записан
niXman
Гость
« Ответ #8 : Ноябрь 30, 2009, 14:38 »

Цитировать
На ум приходит bool QMetaObject::invokeMethod
Вот. То что нужно Улыбающийся

Цитировать
А зачем тебе в данной задаче использовать QT механизм сигнал/слот?
Так я реализовал задачу. Говорю же: необыкновенная нейронная сеть.

Цитировать
В данном случае это очень плохое решение.
По чему очень плохое?
Записан
BRE
Гость
« Ответ #9 : Ноябрь 30, 2009, 14:41 »

По чему очень плохое?
Потому, что нужно много времени на все коннекты.
Можно хранить указатель на объект/указатель на метод и дергать его на прямую. Можно задействовать boost, там есть и bind и function.
Записан
niXman
Гость
« Ответ #10 : Ноябрь 30, 2009, 14:44 »

Цитировать
Потому, что нужно много времени на все коннекты.
Смеющийся сам знаю.

Цитировать
Можно хранить указатель на объект/указатель на метод и дергать его на прямую. Можно задействовать boost, там есть и bind и function.
Не потокобезопасно! А синхронизация такого кол-ва соединений с параллельной сетью, съест еще больше ресурсов. И моего моцга Улыбающийся

Вопрос решен.
Всем огромное спасибо!
Записан
BRE
Гость
« Ответ #11 : Ноябрь 30, 2009, 14:50 »

Так там еще многопоточность.
Не забывай, что вызов слота в другом потоке будет происходить через очередь сообщений этого потока, т.е. дополнительные задержки + порядок вызова слотов из разных потоков определить будет не легко.
Записан
niXman
Гость
« Ответ #12 : Ноябрь 30, 2009, 14:56 »

Цитировать
Не забывай, что вызов слота в другом потоке будет происходить через очередь сообщений этого потока, т.е. дополнительные задержки + порядок вызова слотов из разных потоков определить будет не легко.
Среди нейронов нет ГУИ объектов. Значит и сигналов кроме мойх нет.
При том, есть флаг Qt::DirectConnection
Записан
BRE
Гость
« Ответ #13 : Ноябрь 30, 2009, 14:58 »

Среди нейронов нет ГУИ объектов. Значит и сигналов кроме мойх нет.
При том, есть флаг Qt::DirectConnection
Попробуй, но могут быть (и я думаю будут) глюки.  Подмигивающий
Записан
niXman
Гость
« Ответ #14 : Ноябрь 30, 2009, 15:03 »

Цитировать
Попробуй, но могут быть (и я думаю будут) глюки.
Так нет же, работает. Просто долго организовывалась.
Записан
Страниц: [1] 2   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.051 секунд. Запросов: 23.