我正在編寫計算機視覺應用程序(C++和OpenCV)。我正在用wxWidgets爲它創建一個GUI - 這非常簡單;按鈕按下事件會啓動跟蹤器應用程序。程序無法正確終止
我的電話,終止應用程序(即在單擊關閉按鈕)如下:
// Exiting the App
void MyFrame::OnQuit(wxCommandEvent& WXUNUSED(event))
{
// true is to force the frame to close
Close(true);
}
這通常更瑣碎的GUI應用程序的工作原理。然而,在這種情況下,框架消失了,在任務管理器中,該過程似乎繼續運行並持有內存。這是非常惱人的,因爲如果我運行或調試應用程序和以後做一些改變,並嘗試再次運行,無需手動提前終止的過程中,編譯器會引發鏈接錯誤,因爲該.exe是
not found or not built by the last incremental link.
嘗試插入強力退出(1);在onQuit方法,但它導致應用程序崩潰。
我不知道它是什麼..當沒有GUI的情況下運行,應用程序運行並終止正常(儘管它被稱爲稍微不同 - 從main()函數而不是按鈕按下事件處理程序調用抽象基類)。
是否有可能是因爲一個類正在聲明全局範圍?在一個文件中,我有一個在任何類方法之外聲明的類的實例?也許wxWidgets不能處理這個?
澄清:
我關閉框架是一個頂層幀。當它沒有調用計算機視覺方法時,我對完全相同的GUI代碼沒有任何問題。
我沒有具體編碼任何多線程,但開始,我得到一個錯誤,說:「錯誤:無法初始化OLE」。爲了解決這個問題,我必須將wxUSE_DRAG_AND_DROP,wxUSE_CLIPBOARD,wxUSE_OLE和wxUSE_OLE_AUTOMATION設置爲0(而不是1),然後(重新)編譯wxWidgets。
想知道,是否有某種與HighGUI進行的線程與WxWidgets不一致?有其他人遇到過類似的問題嗎?
聽起來像你有多個線程,並調用'Close()'不會殺死所有的線程。 – Dima 2011-05-04 18:03:59
如果您沒有連接到由窗口生成的按鈕按下事件,您認爲按下按鈕時會發生什麼?設置斷點和調試或顯示更多相關的代碼。 – AJG85 2011-05-04 18:04:08