2012-04-30 82 views
2

在我的wxWidgets應用程序中,我正在檢查命令行參數,如果找到它,我會執行一個操作,然後關閉窗口。不過,我似乎無法讓應用程序正常關閉。我想用一個退出代碼關閉程序,例如3.當我檢查wxApp :: OnInit中的命令行參數時,我試圖調用exit(3),但是,這似乎是不正確的,因爲它導致內存泄漏wxWidgets的。如何正確關閉應用程序並退出代碼

我又試圖但是存儲退出代碼,重寫OnRun和回到那裏,當我做我得到一個崩潰的init.cpp472return wxTheApp->OnRun();

有沒有人知道我可以在檢測到應用程序應該關閉後用wxApp的自定義退出代碼正確關閉應用程序?我也試圖超載wxApp::OnExit,但是,它永遠不會被調用,即使我沒有超載OnRun

http://codepad.org/WYiOJq55

代碼例如,由於在這個崗位沒有被允許出於某種原因

編輯粘貼代碼的代碼:

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

也許顯示一個簡單的自包含的問題行爲的例子? – AJG85

+0

'exit'不允許堆棧放開,所以顯然任何具有不平凡析構函數的對象都會「泄漏」。 – ildjarn

+0

我一直在嘗試,但我不斷收到錯誤,說我的代碼沒有格式化,即使它是 – judeclarke

回答

1

基於您的意見似乎你永遠不要發動wxFrame和只想儘快退出應用程序。爲此,請將您的構造函數SomeApplication初始化爲mExitCode0。然後在OnInit進行命令行參數檢查,如果您想要在檢查後立即關閉應用程序,請將mExitCode設置爲退出代碼,將return true設置爲OnInit

以下是您的OnRun函數如何在沒有打開另一個窗口的情況下工作。

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

    return mExitCode; 
} 
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(); 
} 

的問題是,你是不是調用基class OnRun在檢查退出代碼之前,可能設置在由wxAPP :: OnRun()執行的代碼中的某處()

所以我猜這會爲你工作

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

這似乎與運行這樣的功能,該程序將不會真正關閉。雖然該函數確實被調用,但返回從未被調用,因爲它似乎只是在wxApp :: OnRun – judeclarke

+0

什麼函數?像什麼運行?我不太瞭解你的評論。當最後一個窗口關閉時,wxApp:onRun返回。當SomeApplication :: OnRun返回時,返回值傳遞給exit()。 ...你嘗試過我建議的代碼嗎? – ravenspoint

+0

運行您的OnRun函數將永遠不會返回,因爲我正在執行命令行檢查,所以我從不打開窗口。我只在命令行檢查後打開一個窗口,如果我不希望根據提供的參數關閉應用程序。 – judeclarke

相關問題