Windows App&x27;s主窗口冻结,调整大小帮助:如何诊断问题?

Windows App&x27;s主窗口冻结,调整大小帮助:如何诊断问题?,windows,debugging,graphics,mfc,Windows,Debugging,Graphics,Mfc,注意:这不是一个新手问题 我的应用程序的主窗口偶尔会“冻结”,出现下面列出的症状。主窗口调整后,应用程序将继续正常工作。 调试器、Windows应用程序验证程序和我使用的其他工具没有发现任何问题 原因可能是什么?我如何检查窗口被阻止更新的原因 一些细节: < L> 32位C++ MFC应用程序,在24/7种模式中的许多Window XP安装中工作多年 该应用程序使用MFC/GDI函数呈现一些简单的2D图形 在64位Windows 7下的多台计算机上,应用程序的主窗口很少(每月约一次)停止更新:

注意:这不是一个新手问题

我的应用程序的主窗口偶尔会“冻结”,出现下面列出的症状。主窗口调整后,应用程序将继续正常工作。 调试器、Windows应用程序验证程序和我使用的其他工具没有发现任何问题

原因可能是什么?我如何检查窗口被阻止更新的原因

一些细节:

    < L> 32位C++ MFC应用程序,在24/7种模式中的许多Window XP安装中工作多年
  • 该应用程序使用MFC/GDI函数呈现一些简单的2D图形
  • 在64位Windows 7下的多台计算机上,应用程序的主窗口很少(每月约一次)停止更新:它看起来就像应用程序截取了主窗口的客户端区域的屏幕截图,并在邮件窗口调整大小之前显示此屏幕截图
  • 我的诊断日志和各种工具表明,一旦冻结,应用程序在内部工作正常:它仍然呈现更新,但由于某些原因Windows会忽略它们
  • 应用程序主菜单打开并正常工作
  • 所有图纸均为单螺纹
  • 通过主菜单调用的各种模式对话框也能正常工作
  • 我的应用程序顶部的记事本可以正常显示,不会留下任何痕迹
  • Windows本身和所有其他应用程序始终正常工作
我认为这与我们正在使用的视频卡/其驱动程序有关(3个显示器连接到两个NVIDIA NVS 300),但我不明白为什么只有我的应用程序受到影响。此外,我想知道什么魔术的大小删除更新锁

更新日期2015年9月12日

  • 我确信绘图线程没有被阻塞:应用程序主线程也总是正确地响应鼠标单击、菜单命令和键盘
  • 所有计数器(内存、处理器、GDI/用户对象)都表明没有问题

这里没有太多事情要做。提供一些示例代码或特定诊断可能会对您有所帮助。我认为你使用的任何重新绘制的代码都是最有用的。Stack Overflow更喜欢特定的问题,而这一个问题会引出很多“如何调试”的答案,这些答案相当宽泛。如果窗口冻结,并且似乎在调整大小/菜单操作时醒来,则强烈表明消息循环已停止处理消息。开始移动/调整大小/菜单操作进入由系统实现的模式消息循环。它是一个嵌套的消息循环,再次开始处理消息。模态对话框也是如此。我不理解(也无法解释)为什么应用程序看起来像预期的那样在内部工作。您正在生成什么类型的日志?我将在任务管理器中检查冻结时GDI句柄的数量。在24/7应用程序中,即使是缓慢泄漏也可能耗尽可用手柄。这可能不是泄漏,只是懒散地释放分配的资源。@Vlad Feinstein,这是我首先检查的。所有计数器正常所有故障机器都使用Aero主题吗?如果是-您能将其中一个更改为Windows Classic并查看这是否是DWM的错误吗?这里没有太多内容。提供一些示例代码或特定诊断可能会对您有所帮助。我认为你使用的任何重新绘制的代码都是最有用的。Stack Overflow更喜欢特定的问题,而这一个问题会引出很多“如何调试”的答案,这些答案相当宽泛。如果窗口冻结,并且似乎在调整大小/菜单操作时醒来,则强烈表明消息循环已停止处理消息。开始移动/调整大小/菜单操作进入由系统实现的模式消息循环。它是一个嵌套的消息循环,再次开始处理消息。模态对话框也是如此。我不理解(也无法解释)为什么应用程序看起来像预期的那样在内部工作。您正在生成什么类型的日志?我将在任务管理器中检查冻结时GDI句柄的数量。在24/7应用程序中,即使是缓慢泄漏也可能耗尽可用手柄。这可能不是泄漏,只是懒散地释放分配的资源。@Vlad Feinstein,这是我首先检查的。所有计数器正常所有故障机器都使用Aero主题吗?如果是-能否将其中一个更改为Windows Classic,并查看这是否是DWM的错误?