如何在崩溃后重新启动qt应用程序?

问题描述:

是否可以在崩溃后重新启动qt应用程序?就像那些将自行重启的Windows服务一样。如果是这样,我该怎么做?我曾尝试这样的代码:如何在崩溃后重新启动qt应用程序?

#define RESTART_CODE 1000 
int main(int argc, char *argv[]) 
{ 
    int return_from_event_loop_code; 
    QPointer<QApplication> app; 
    QPointer<MainWindow> main_window; 
    do 
    { 
    if(app) delete app; 
    if(main_window) delete main_window; 

    app = new QApplication(argc, argv); 
    main_window = new MainWindow(app); 
    return_from_event_loop_code = app->exec(); 
    } 
    while(return_from_event_loop_code==RESTART_CODE) 

    return return_from_event_loop_code; 
} 

但它不工作... 我应该怎么办?

+1

通常这里的做法是有某种监督的过程。它必须独立于崩溃过程,显然 –

+0

您可以*在Windows上执行此操作(搜索“结构化异常处理”),但通常这不是一个好主意 - 如果您的应用程序在启动时崩溃了,该怎么办?它很容易陷入开始/崩溃/开始循环。 – MrEricSir

+0

如果您的应用因分段错误而崩溃,您的代码将无法使用... – Venemo

创建另一个运行应用程序的qt应用程序。

#include <QApplication> 
#include "QProcess" 

int main(int argc, char *argv[]) 
{ 
    QApplication a(argc, argv); 
    QProcess aProcess; 
    QString exe = "Your process name with exact path"; 
    QByteArray myOut; 
    while(1) 
    { 
     aProcess.start(exe); 
     //aProcess.waitForStarted(); 
     //myOut = aProcess.readAllStandardOutput(); 
     //printf("%s",myOut.constData()); 
     aProcess.waitForFinished(-1); 

     //QString output(aProcess.readAllStandardOutput()); 

     myOut = aProcess.readAllStandardOutput(); 
     printf("%s",myOut.constData()); 
    } 
    enter code here 
    return a.exec(); 
} 

这一计划将重新启动应用程序时坠毁或关闭