如何在崩溃后重新启动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;
}
但它不工作... 我应该怎么办?
答
创建另一个运行应用程序的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();
}
这一计划将重新启动应用程序时坠毁或关闭
通常这里的做法是有某种监督的过程。它必须独立于崩溃过程,显然 –
您可以*在Windows上执行此操作(搜索“结构化异常处理”),但通常这不是一个好主意 - 如果您的应用程序在启动时崩溃了,该怎么办?它很容易陷入开始/崩溃/开始循环。 – MrEricSir
如果您的应用因分段错误而崩溃,您的代码将无法使用... – Venemo