- windows/
- Windows App&x27;s主窗口冻结,调整大小帮助:如何诊断问题?
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的错误?