我正在编写计算机视觉应用程序(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