Как корректно завершить консольное приложение? |
Здравствуйте, гость ( Вход | Регистрация )
Как корректно завершить консольное приложение? |
Litkevich Yuriy |
29.10.2008, 12:28
Сообщение
#1
|
разработчик РЭА Группа: Сомодератор Сообщений: 9669 Регистрация: 9.1.2008 Из: Тюмень Пользователь №: 64 Спасибо сказали: 807 раз(а) Репутация: 94 |
делаю консольную программу
main.cpp
В классе Controller, устанавливается соединение с БД (Controller::setDB("DB", "USER", "PASSWORD")) и запускается таймер (Controller::run()), по ка по таймеру в консоль пишется счетчик, просто для видимости работы. в pro-файле присутствуют такие строчки: QT += sql QT -= gui Проблема: При попытке завершить программу, либо закрытием окна консоли, либо <Ctrl>+<C> выскакивает ошибка типа: "Память не может быть прочитана, нарушение прав доступа". Что нужно сделать чтоб этой ошибки небыло, и как корректно завершать работу консольного приложения. Деструктор класса, как я предпологаю, не вызывается. А внем я удаляю соединение. |
|
|
Tonal |
29.10.2008, 12:42
Сообщение
#2
|
Активный участник Группа: Участник Сообщений: 452 Регистрация: 6.12.2007 Из: Новосибирск Пользователь №: 34 Спасибо сказали: 69 раз(а) Репутация: 17 |
Если Linux - обрабатывать системные сигналы.
Если Windows - сообщения консоли. Ну или можно всю обработку пустить отдельным потоком, а в консоле, в главном потоке, просто ждать в цикле любого ввода - который и будет обозначать окончание. Сообщение отредактировал Tonal - 29.10.2008, 12:44 |
|
|
Litkevich Yuriy |
29.10.2008, 12:48
Сообщение
#3
|
разработчик РЭА Группа: Сомодератор Сообщений: 9669 Регистрация: 9.1.2008 Из: Тюмень Пользователь №: 64 Спасибо сказали: 807 раз(а) Репутация: 94 |
Если Windows - сообщения консоли. и как это можно в Qt'ях сделать? Я пологал что закрытие окна, кнопкой с крестиком, обрабатывается автоматически классом QCoreApplication.просто ждать в цикле любого ввода так это проц нагрузит, как я понимаю.я попробывал в метод Controller::run() воткнуть удаление БД, это избавляет от ошибки, т.е. сам объект Controller , с его таймером, уничтожаются корректно. А вот с БД, возникает казус. |
|
|
Tonal |
1.11.2008, 13:54
Сообщение
#4
|
Активный участник Группа: Участник Сообщений: 452 Регистрация: 6.12.2007 Из: Новосибирск Пользователь №: 34 Спасибо сказали: 69 раз(а) Репутация: 17 |
Если Windows - сообщения консоли. и как это можно в Qt'ях сделать? Я пологал что закрытие окна, кнопкой с крестиком, обрабатывается автоматически классом QCoreApplication.Неверно полагал. Это можно отследить только WinAPI. Qt тут не помощник. просто ждать в цикле любого ввода так это проц нагрузит, как я понимаю.Ну тебе же всё равно нужно цикл сообщений крутить? Вот в нём и проверять - есть что-нибудь на стандартном вводе или нет. |
|
|
Текстовая версия | Сейчас: 30.12.2024, 20:36 |