QEventLoop тормозит при удалении экземпляра
Привет. Я писал когда-то такой метод в главной модели проекта:
void TreeModel::waitIfBusy() { if(busy()) waitingFor(this, &TreeModel::busyChanged); } template<class TObj, class TSignal> void TreeModel::waitingFor(TObj &&obj, TSignal &&signal) { QEventLoop loop; connect(obj, signal, &loop, &QEventLoop::quit); loop.exec(); }
Применение простое. Вызываем у экземпляра модели просто
waitIfBusy()
и приложение стопится, пока эта модель не перейдет в положение "свободна".
Проблема: если экземпляр модели умирает во время выполнения этого метода и, соответственно, всех текущих сервисов и их потоков, то
eventloop
куксится, выдааёт предупреждение и это вызывает задержку (так как
evenloop
только через какое-то время доходит до нашего метода и видит, что потоки уже умерли).
Самая типичная ситуация - закрытие вкладки, во время работы такой модели.
Что можно придумать, чтобы измежать такой проблемы?

Рекомендуем хостинг TIMEWEB
Стабильный хостинг, на котором располагается социальная сеть EVILEG. Для проектов на Django рекомендуем VDS хостинг.Вам это нравится? Поделитесь в социальных сетях!
Комментарии
Пожалуйста, авторизуйтесь или зарегистрируйтесь
- Unknown akadamn
- 24 января 2025 г. 17:14
Qt - Тест 001. Сигналы и слоты
- Результат:84баллов,
- Очки рейтинга4
- Unknown akadamn
- 24 января 2025 г. 16:22
Qt - Тест 001. Сигналы и слоты
- Результат:42баллов,
- Очки рейтинга-8


Добрый день.
Объявить QEventLoop на стеке (в объявление класса, как member), а в деструкторе модели производить его отключение. Если получится, конечно.
В любом случае какие-то действия можно будет произвести скорее всего только в деструкторе, в момент удаления экземпляра модели.
я подзабыл - try catch в деструктор помещать не считается мовитоном?
Думаю, что нет. Лучше вообще без исключений, но не всегда возможно.