| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > С/С++: Кроссплатформенное программирование, Qt/Gtk+/wxWidgets > сигналы возвращающие значение |
| Автор: sergey_85 4.2.2010, 14:17 | ||
| Привет! Возник вопрос, всегда делал сигналы, возвращающие void, а можно ли создавать сигналы, которые возвр. значение?
Спасибо! |
| Автор: andrew_121 4.2.2010, 14:29 |
| нельзя. где-то в документации по сигнал-слотовой модели это описано. для этого есть boost.signals |
| Автор: sergey_85 4.2.2010, 14:31 | ||
| ок Добавлено через 6 минут и 47 секунд хорошо, а если возвратить из параметра ф-ции ссылку, думаете пройдет?
|
| Автор: KADABRA 4.2.2010, 19:29 | ||
Да. |
| Автор: SABROG 4.2.2010, 20:37 | ||
Не должно пройти. Чтобы прошло тип еще надо зарегистрировать. А такое вообще бессмысленно:
Если сигнал межпоточный или Qt::QueuedConnection, то сразу после emit в isOK результата не будет. Для подобных сигналов всего-лишь добавляется в очередь событий эвент QEvent::MetaCall. А обрабатывается он только после того как ты выйдешь из того метода где выпустил сигнал (или в qApp->processEvents() или в локальном QEventLoop). Если уж без сигналов вообще никак не можешь, то отправляй в обратную сторону сигнал с результатом, только придется реализовать очередь, т.к. не факт, что они будут приходить по порядку. Пока на лицо не правильно спроектированное приложение. |
| Автор: SABROG 4.2.2010, 21:59 | ||||
Должно, с DirectConnect сигналы работают как обычный callback. |
| Автор: sergey_85 5.2.2010, 09:05 |
| Буду использовать Qt::BlockingQueuedConnection или уберу параметр Добавлено через 2 минуты и 59 секунд мне и нужен обычный callback |
| Автор: SABROG 5.2.2010, 12:19 | ||||
С ним надо поосторожней, если сигнал и слот будут в одном потоке, то это приведет к зависанию приложения (deadlock)
Нужен обычный межпотоковый callback или обычный? |
| Автор: sergey_85 5.2.2010, 12:39 |
| обычный, все в главном потоке приложения. |
| Автор: SABROG 5.2.2010, 12:47 | ||
Почему бы тогда не использовать обычный указатель на метод класса или функцию? |
| Автор: sergey_85 5.2.2010, 15:30 |
| ну можно, но всё-таки Qt, сигналы более удобны |
| Автор: Madonna 5.2.2010, 16:17 | ||
Быстрее будет + ИМХО проще и нативно. Модель сигнал-слот использует макросы. |
| Автор: andrew_121 5.2.2010, 17:01 |
нет, boost.signals - вот где удобство! |