【问题标题】:Untidy program exit: MFC C++杂乱的程序退出:MFC C++
【发布时间】:2017-02-18 09:40:31
【问题描述】:

我有一个 MFC C++ 程序,它偶尔会无缘无故地在错误退出时崩溃。我的具体查询如下:

在我的 InitInstance() 重载中,有各种检查,以及设置事件和信号量等资源。当用户请求正常退出时,有一个 OnDestroy() 消息处理程序会关闭所有内容,包括释放资源等。该位工作正常。

当 InitInstance() 中的一项检查失败并且函数返回值 0(导致程序退出)时,就会出现问题。我的问题是:在那种情况下,是否会自动调用 OnDestroy() 来清理内容,还是我需要在退出 InitInstance 之前自己运行它?

【问题讨论】:

  • 你为什么不问你的调试器呢?在OnDestroy() 中设置断点,看看会发生什么。此外,进程不会“无缘无故”崩溃。原因很明显,当您将调试器设置为中断时,会引发 Win32 异常。不要束手无策。
  • 您的程序中有比主程序寿命更长的线程或互斥锁吗?它们应该在主退出后关闭,但是有一个 MSVC 错误需要手动修复。
  • @ark1974:当控制离开用户提供的入口点(它在 GUI 程序中称为 WinMain,而不是 main)时,无论是否执行清理,这几乎是无关紧要的。该进程即将退出,操作系统无论如何都会回收所有资源。不确定您指的是哪个“bug”

标签: c++ mfc crash intermittent


【解决方案1】:

如果一个主窗口窗口已经存在,你应该在之前使用 DestroyWindow 销毁它。不,当 InitInstance 以 FALSE 退出时,它不会自动销毁。 ExitInstance 已执行,但现有窗口将在应用程序退出时关闭。

无论如何,当应用程序存在时,文件和内存等资源都会被释放。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2023-03-09
    • 1970-01-01
    • 2019-12-01
    • 1970-01-01
    • 2018-06-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多