返回介绍

15.8 异常处理

发布于 2025-03-08 15:27:56 字数 1277 浏览 0 评论 0 收藏 0

wxWidget 创立的时间比起"异常"的概念引入 C++要早的多,因此在其代码中已经花费了大量的力气来应付各种各样的异常,因此,可以说,整个 wxWidgets 框架内部都没有使用 C++的异常机制.当然,这并不意味着你不可以在你的代码中使用 C++的异常机制,相反,你在你的代码中使用它是安全的,而且 wxWidgets 也会帮助你这样作。

要在你的程序中使用异常处理机制,最简单的方法就是根本忽略它的存在,既然 wxWidgets 不会抛出任何异常,你又何必去处理异常呢?除非你的代码自己抛出了一些异常.这是最简单的方法,但是有时候,对于处理各种可能遇到的错误来说,这种方法是不够的。

另外一个策略是你只用异常机制来处理那些非常致命的系统错误.这种情况下,你不寄希望于你的程序可以从这种致命错误中恢复,它所作的事情只是让你的程序以一种更绅士的方式结束.这种情况下,你只需要重载你的 wxApp 派生类的 OnUnhandledException 函数来执行资源清除工作,注意这时候所有和异常有关的信息已经被清除了.如果你需要这些信息,你需要在 OnRun 函数中针对调用基类函数的语句使用 try/catch 语句块. 这将使得你可以捕获在应用程序主循环中引发的异常.如果你还希望处理在应用程序初始化和退出时候引发的异常,你需要在你的 OnInit 和 OnExit 函数中使用 try/catch 语句。

最后,如果你希望在异常发生的时候,你的应用程序可以从异常中恢复并且继续运行,那么:如果你程序的异常主要集中在某个类(或其派生类) 的事件处理函数中,你可以你可以在这个类的 ProcessEvent 函数中统一处理这些异常,如果这是不切实际的,你还可以考虑重载 wxApp:: HandleEvent 函数,它将允许你拦截并处理任何由事件处理函数引发的异常。

wxWidgets 的异常处理机制默认是打开的,它取决于 wxUSE_EXCEPTIONS 标记被设置为 1.但是如果它被设置为 0,在 windows 版本中,你需要修改 include/wx/msw/setup.h 将其更改为 1,或者在别的平台上运行 configure 时增加-- enable-exceptions 开关.而将其设置为 0 或者使用--disable-exceptions 开关将会产生更为小巧和相对快速的 wxWidgets 库.另外,在 windows 平台下,如果你使用的是 Visual C++,你希望使用 wxApp::OnFatalException 函数来处理异常而不是引发一个 GPF(一般保护性错误),你可以在你的 setup.h 中将 wxUSE_ON_FATAL_EXCEPTION 设置为 1.相反的,如果你宁愿将这种错误扔给你的调试器,将它设置成 0。

wxWidgets 自带一个使用异常的例子,位于 samples/except 目录中。

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文