Здравствуйте, гость ( Вход | Регистрация )
ilya | Дата 18.4.2012, 14:41 |
Да, может быть. Ещё поищу сам, спасибо. | |
wiz29 | Дата 18.4.2012, 14:25 |
Видимо проблема не в этом месте, а других объектах - потоках возможно. | |
ilya | Дата 18.4.2012, 13:35 |
Поставь для главного окна атрбут Qt::WA_DeleteOnClose; По умолчанию окно не уничтожается при закрытии. Либо вызывай вместо метода close в обработчике исключения qApp->quit() Попробовал вставить в main() строку
- не помогает. Написал маленький тестовый пример, где по нажатию кнопки вызывается close() - завершается нормально и без установки этого флага. А qApp->quit() - это ведь то же самое, что и qApp->exit(0), и тоже не работает. |
|
wiz29 | Дата 18.4.2012, 13:17 |
Поставь для главного окна атрбут Qt::WA_DeleteOnClose; По умолчанию окно не уничтожается при закрытии. Либо вызывай вместо метода close в обработчике исключения qApp->quit() |
|
ilya | Дата 18.4.2012, 12:45 |
А чем тебе такое не нравится? Сделай функцию Start() типа bool и в ней, если не удалось запустить, вывести ошибку. Дело в том, что класс Recorder - это мост между графическим интерфейсом и остальной, достаточно большой, частью программы, вся обработка ошибок в которой построена на исключениях. Хорошим тоном при разработке архитектуры программного продукта считается выработка единой стратегии обработки ошибок, поэтому применение исключений в классе Recorder не обсуждается. Вообще, мысль в корне правильная - при возникновении исключения в конструкторе деструктор класса не вызывается, что может привести к утечке ресурсов, и, возможно, как раз к тому, что программа перестанет правильно завершаться. Но все ресурсы в этом коде используются через смартпойнтеры, поэтому утечки ресурсов тут априори не может быть, и дело скорее всего не в этом. |
|
Snake174 | Дата 18.4.2012, 12:25 |
А чем тебе такое не нравится? Сделай функцию Start() типа bool и в ней, если не удалось запустить, вывести ошибку.
|
|
ilya | Дата 18.4.2012, 12:16 |
Попробуй как-нибудь так сделать: Этот код будет аварийно завершать приложение при неудачной попытке создать объект типа Recorder, потому что возникающее при этом исключение останется неперехваченным. Собственно, вопрос в том и состоит, как красиво завершить приложение при возникновении ошибки. |
|
Snake174 | Дата 18.4.2012, 12:04 |
Попробуй как-нибудь так сделать:
|
|
ilya | Дата 18.4.2012, 11:54 |
Можешь привести код функции main твоего приложения? и заодно код виджета. А также попробуй пересобрать (может поможет) Код сначала не стал приводить, но сейчас проблема частично локализовалась Происходит следующее: 1. метод Start() вызывает метод StartRecorder() 2. метод StartRecorder() пытается создать объект типа Recorder 3. объект при создании кидает исключение типа RecorderError 4. в обработчике исключения почему-то не вызывается деструктор окна 5. точка выполнения возвращается в функцию Start(), где на второй строке программа успешно сегфолтится
Пересобирать, конечно, пробовал, и в дебаге и в релизе, но безуспешно. P.S. Код функции main() стандартный:
|
|
wiz29 | Дата 18.4.2012, 10:30 |
Можешь привести код функции main твоего приложения? и заодно код виджета. А также попробуй пересобрать (может поможет) |
|
Просмотр темы полностью (откроется в новом окне) | |
Текстовая версия | Сейчас: 29.3.2024, 5:31 |