程序未正确终止
Program Doesn't Terminate Correctly
我正在写一个计算机视觉应用程序(c++和OpenCV)。我正在创建一个GUI与wxWidgets -这是非常简单的;按下按钮事件调用跟踪器应用程序开始。
我终止应用程序的调用(即点击关闭按钮)如下:
// Exiting the App
void MyFrame::OnQuit(wxCommandEvent& WXUNUSED(event))
{
// true is to force the frame to close
Close(true);
}
这通常适用于更琐碎的GUI应用程序。然而,在这种情况下,框架仍然消失,在任务管理器中,进程似乎继续运行并占用内存。这是非常恼人的,因为如果我运行或调试应用程序,后来做了一些改变,并试图再次运行,没有手动终止进程事先,编译器抛出一个链接错误,因为。exe是
没有找到或没有被最后一个增量链接构建。
尝试插入暴力退出(1);在onQuit方法中,但是这会导致应用程序崩溃。
我不确定它是什么…当没有GUI运行时,应用程序运行和终止良好(尽管它的调用略有不同-从main()函数而不是从调用抽象基类的按钮按下事件处理程序)。
是否可能是因为一个类被声明为全局作用域?在一个文件中,我有一个类的实例外声明的任何类方法?也许wxWidgets不能处理这个?
澄清:
我要关闭的框架是一个顶级框架。当它不调用计算机视觉方法时,我对完全相同的GUI代码没有任何问题。
我没有特别编码任何多线程,但首先,我得到一个错误,说"错误:无法初始化OLE"。为了解决这个问题,我必须将wxUSE_DRAG_AND_DROP, wxUSE_CLIPBOARD, wxUSE_OLE和wxUSE_OLE_AUTOMATION设置为0(而不是1),然后(重新)编译wxWidgets。
只是想知道,是否有某种线程HighGUI正在与WxWidgets不一致?有人遇到过类似的问题吗?
::wxExit
void wxExit()
调用wxApp::OnExit后退出应用程序。只应在紧急情况下使用:通常应该删除顶层帧(在删除所有其他帧之后)以终止应用程序。参见wxCloseEvent和wxApp。
包含文件
<wx/app.h>
你也可以简单地调用crt函数exit(),它会立即关闭一切。
但是,如果您想要比这些相当野蛮的方法更礼貌(如果您在wxApp::OnExit中放置了一些特殊的关闭代码,您可能特别想要这样做)),然后你要找到顶层窗口并关闭它。要在代码中的任何地方执行此操作
wxGetApp().GetTopWindow()->Close()
谢谢你的帮助,我已经解决了这个问题。现在看起来相当明显,但当时无法理解!
最初,我的计算机视觉应用程序是从main函数调用的。然而,有了新的GUI代码,就不需要main了,所以我用shell类代替了原来的main。
虽然我在计算机视觉类的方法中很小心地释放了分配的内存,但我对原始main函数却没有那么小心,因为一旦该函数结束,之前使用的所有内存都会被程序的常规退出所清除。
与新GUI代码的不同之处在于,当shell类完成时-程序仍在运行。线索是,即使计算机视觉应用程序已经结束,我的网络摄像头上的蓝光仍在闪烁。
*确保调用cvReleaseCapture(&capture);*
对Close
的调用只关闭了框架,但没有停止应用程序,因为它不是最后一个顶层窗口。wxWidget包含一个主题Window Deletion Overview。它声明
当最后一个顶层窗口(wxFrame或wxDialog)被销毁时,wxWidgets应用程序会自动退出。把所有应用程序范围的清理代码放在wxApp::OnExit中(这是一个虚函数,不是事件处理程序)。
你的框架是顶层框架吗?如果没有,您可能必须在顶级框架上调用Close
或Destroy
。
- 堆栈粉碎终止程序
- 为什么我的显示功能会终止程序?
- 调用 raise(signal) 会终止 c++ 程序
- 使用终止程序的指针在数组中输入字符串
- C++ Argv[1] 终止程序,返回值 9009
- protobuf "oneof" sub-protobuf 对象指针终止程序
- 有没有办法避免在发生堆栈粉碎时终止程序
- c++ 终止程序的内存泄漏何时重要?
- C :CTRL D终止程序(Ubuntu)
- 用信号25终止程序,超过文件尺寸限制;为什么
- 是否有一种方法可以在输入负数时平均不包括负数,这是您终止程序的方式
- 正确关闭应用程序:终止程序的替代方案
- 提升线程终止程序
- Shell脚本终止程序,但导致无法写入输出文件
- 访问引用变量会终止程序
- 需要使用"enter"密钥终止程序
- C++按Enter键终止程序
- std::向量使用const_iterator终止程序
- Unicode导致关闭消息框终止程序
- 当我在函数中调用一个函数时,它会跳过代码并终止程序