Russian Qt Forum

Qt => Вопросы новичков => Тема начата: Alf от Август 25, 2011, 16:16



Название: quit или exit ?
Отправлено: Alf от Август 25, 2011, 16:16
Вот это бесконечный цикл, программа не завершится никогда:

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

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

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

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

Из справки:
Цитировать
void QCoreApplication::quit () [static slot]. ... Equivalent to calling QCoreApplication::exit(0).


Название: Re: quit или exit ?
Отправлено: Sancho_s_rancho от Август 25, 2011, 16:22
Очередь событий?
пи.си. QCoreApplication::exit(0) != exit(0)


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


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

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


Название: Re: quit или exit ?
Отправлено: lit-uriy от Август 26, 2011, 20:40
>>В каких типичных случаях такое завершение программы может быть не корректным ?
Скорее ни в каких.


Название: Re: quit или exit ?
Отправлено: LisandreL от Август 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;
}
тут наше приложение останется без финализации.