Обмен сигнал-слотами крашится |
Здравствуйте, гость ( Вход | Регистрация )
Обмен сигнал-слотами крашится |
cupersuper |
10.11.2015, 20:11
Сообщение
#1
|
Студент Группа: Новичок Сообщений: 16 Регистрация: 5.5.2011 Пользователь №: 2654 Спасибо сказали: 0 раз(а) Репутация: 0 |
Объект 1 класса отсылает сигнал объекту 2 класса, тот при получении сигнала, отвечает. Получается некий цикл. Программа завершается с ошибкой через 3580 таких итераций на Qt4.8, через 3683 на Qt4.7.
Не пойму почему крашится.
test2.zip ( 2.49 килобайт ) Кол-во скачиваний: 140 |
|
|
lanz |
11.11.2015, 10:07
Сообщение
#2
|
Старейший участник Группа: Участник Сообщений: 690 Регистрация: 28.12.2012 Пользователь №: 3660 Спасибо сказали: 113 раз(а) Репутация: 8 |
Поскольку оба объекта в одном потоке, вызовы слотов происxодят как вызовы обычных функций и получается бесконечная рекурсия:
Если хотите устроить такой обмен, используйте либо QTimer::singleShot(0, go/back), чтобы поток вернулся в цикл обработки событий, прежде чем вызывать метод. Либо откажитесь от такого циклического вызова. Кстати зачем он вам? Возможно вы решаете не ту проблему. |
|
|
cupersuper |
12.11.2015, 13:02
Сообщение
#3
|
Студент Группа: Новичок Сообщений: 16 Регистрация: 5.5.2011 Пользователь №: 2654 Спасибо сказали: 0 раз(а) Репутация: 0 |
Решил проблему.
Добавил Qt::QueuedConnection и сигнал стал отправляться после отработки вызвавшей его функции. lanz, спасибо, через QTimer тоже можно. |
|
|
Текстовая версия | Сейчас: 28.3.2024, 12:48 |