Russian Qt Forum
Ноябрь 23, 2024, 16:15 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: quit или exit ?  (Прочитано 5035 раз)
Alf
Гость
« : Август 25, 2011, 16:16 »

Вот это бесконечный цикл, программа не завершится никогда:

Код:
while( true ) {
    qApp->quit();
}

А так завершится при первом заходе:

Код:
while( true ) {
    exit( 0 );
}

Вопрос: почему в первом случае программа не завершается ?

Из справки:
Цитировать
void QCoreApplication::quit () [static slot]. ... Equivalent to calling QCoreApplication::exit(0).
Записан
Sancho_s_rancho
Гость
« Ответ #1 : Август 25, 2011, 16:22 »

Очередь событий?
пи.си. QCoreApplication::exit(0) != exit(0)
« Последнее редактирование: Август 25, 2011, 16:24 от Sancho_s_rancho » Записан
Alf
Гость
« Ответ #2 : Август 26, 2011, 16:48 »

Т.е. exit(0) в моём случае - это std::exit(0) ? (если вызов функции выполняется внутри метода класса, производного от QWidget, например).
В каких типичных случаях такое завершение программы может быть не корректным ? (вызов деструкторов и т.п.)
Записан
Sancho_s_rancho
Гость
« Ответ #3 : Август 26, 2011, 19:19 »

Т.е. exit(0) в моём случае - это std::exit(0) ? (если вызов функции выполняется внутри метода класса, производного от QWidget, например).
В каких типичных случаях такое завершение программы может быть не корректным ? (вызов деструкторов и т.п.)

А если себе в ногу выстрелить, то в кость попадешь или в мегкие ткани? Зависит от ситуации. В любом случае пуля - не хирургический инструмент.
Qt - это фреймвок, а не библиотека.
Отличие фреймвока от библиотеки в том, что в при использовании фреймвока он вызывает твой код, а при работе с библиотекой твой код дергает библиотечные функции. Если сказано вместо main писать QApplication, а выходить из программы QApplication::quit(), то так и надо делать. Если есть свободное время на исследования, то можно открыть исходный текст Qt и разобраться в тонкостях вопроса.
Записан
lit-uriy
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 3880


Просмотр профиля WWW
« Ответ #4 : Август 26, 2011, 20:40 »

>>В каких типичных случаях такое завершение программы может быть не корректным ?
Скорее ни в каких.
Записан

Юра.
LisandreL
Птица говорун
*****
Offline Offline

Сообщений: 984


Надо улыбаться


Просмотр профиля
« Ответ #5 : Август 26, 2011, 21:13 »

В каких типичных случаях такое завершение программы может быть не корректным?
Например, самый очевидный случай:
Цитировать
int main(int argc, char *argv[])
{
    QApplication app(argc, argv);
    Widget w;
    w.show();
    int result = app.exec();
    someFinalisation();
    return result;
}
тут наше приложение останется без финализации.
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.107 секунд. Запросов: 22.