2016-12-20 17 views
-1

アプリケーションを正常に終了するかクラッシュさせるかを検出する必要があります。 QProcessにはfinished()シグナルがあり、終了コードを取得できます。しかし、アプリケーションがクラッシュまたはクローズするとQApplicationの終了コードが必要になります。QApplication出口を正常またはクラッシュとして検出する

答えて

0

私はこれがあなたのようにできるとは思わない。 0の場合である()(終了するように設定された値を返し その後、呼び出され)

は(出口までメインイベントループと待機を開始:QApplication::exec()によって返される値は、Qtのインフラストラクチャに関連して読んexit()は via quit())です。

このような通常あなたの主なルックス:

#include <QApplication> 

int main(int argc, char **argv) 
{ 
    QApplication a(argc, argv); 

    // Initialize your widget(s) 

    return a.exec(); // You can store this and check its value 
} 

しかし、私は間違っていない場合、これはあなたのアプリケーション(セグメンテーションフォールト、未処理の例外など)のクラッシュを扱う含まれていません。 Linuxでは、通常、アプリケーションを起動し、アプリケーションが終了したりクラッシュした後に終了コードを読み取るスクリプトを使用します。 Linuxを使用している場合は、echo $?を使用して、bashスクリプト(または別のシェルでは同等のコード)から終了コードを読み取り、その値に基づいて何かを実行できます。

何らかのクラッシュが何らかの理由でスローされ、正しく処理されていない例外と同じ結果になるので、少なくともいくつかの例外処理を行うことができます。 Qtの未処理例外はトップレベル(つまりQCoreApplication)に伝播します。

+0

返信いただきありがとうございます。はい、app.exec()は終了コードを返します。しかし、コード – shahina

+0

のような のようなアプリケーションアプリケーション(argc、argv); ウィジェットw; w.show(); return app.exec(); – shahina

+0

ウィジェットはisWindgetです。ウィジェットクラスでクラッシュしているとします。アプリケーションの終了コードを取得する方法は? – shahina

1

プロセスがクラッシュすると、終了しました。クラッシュは、処理されていない例外が原因でプロセスが終了したことを意味します。あなたの仕事はにあり、クラッシュを防ぐにはが起きないようにする必要があります。つまり、例外を処理します。例外はC++の例外ではなく、Windows上のネイティブ例外やUNIX上のシグナルなど、低レベルのプラットフォーム固有のメカニズムかもしれないことに注意してください。それらを処理する必要がありますが、そのような例外を捕まえるだけで根本的な問題は解決されないことを認識してください。あなたはあなたのアプリケーションの状態が壊れていると仮定しなければなりません、とにかくできるだけ早く終了するだけです。たとえば、ファイルを変更しようとしないでください。ファイルを破損する可能性があります。

関連する問題