如何使用退出代码正确关闭应用程序

时间:2012-04-30 21:29:50

标签: c++ command-line initialization wxwidgets exit-code

在我的wxWidgets应用程序中,我正在检查命令行争论,如果我找到它,我会执行操作然后关闭窗口。但是,我似乎无法正常关闭应用程序。我想用退出代码关闭程序,例如3.当我在wxApp :: OnInit中检查命令行参数时,我试图只调用exit(3),但是,这似乎是不正确的,因为它导致内存泄漏到wxwidgets中的某个地方。

然后我尝试存储退出代码,覆盖OnRun并返回那里,但是,当我在init.cpp472 return wxTheApp->OnRun();时发生崩溃。

有没有人知道在检测到应用程序关闭后,如何使用wxApp中的自定义退出代码正确关闭应用程序?我也尝试重载wxApp::OnExit,但是,即使我不重载OnRun,它也永远不会被调用。

http://codepad.org/WYiOJq55处的代码示例,原因是由于某些原因此帖子中不允许使用该代码

编辑代码粘贴:

int SomeApplication::OnRun()
{
    if(mExitCode != 0)
    {
        ExitMainLoop();
        return mExitCode;
    }
    else
        return wxApp::OnRun();
}

2 个答案:

答案 0 :(得分:1)

当我像这样重写wxAPP :: OnRun()时:

int MyApp::OnRun()
{
    wxApp::OnRun();
    return 3;
}

一切正常

如果我创建一个小批处理文件

minimal.exe
echo el is %ERRORLEVEL%

它产生预期的结果

>test.bat

>minimal.exe

>echo el is 3
el is 3

我认为您的代码存在问题

int SomeApplication::OnRun()
{
    if(mExitCode != 0)
    {
        ExitMainLoop();
        return mExitCode;
    }
    else
        return wxApp::OnRun();
}

是你在检查退出代码之前没有调用基类OnRun,可能是在wxAPP :: OnRun()

执行的代码中的某处设置的

所以我猜这会对你有用

int SomeApplication::OnRun()
{
    wxApp::OnRun();
    return mExitCode;
 }

答案 1 :(得分:1)

根据您的评论,您似乎无法启动wxFrame并希望尽快退出应用程序。为此,请让SomeApplication的构造函数将mExitCode初始化为0。然后在OnInit期间执行命令行参数检查,如果要在检查后立即关闭应用程序,请将mExitCode设置为退出代码,并将return true设置为OnInit

以下是OnRun函数在没有打开另一个窗口的情况下的工作方式。

int SomeApplication::OnRun()
{
    if(mExitCode == 0)
        wxApp::OnRun();

    return mExitCode;
}