我有一个用 C++(没有 MFC 或 .NET)编写的大型复杂应用程序。 最积极地使用该软件的客户端将在启动后一小时左右进入所有窗口停止绘制的状态。 我们收到应用程序“挂起”的报告,因为据他们所知,没有发生任何事情。 实际上,该应用程序正在运行,只是不显示任何内容。

我尝试了很多不同的东西都无济于事。 我没有想法了...

#1楼 票数:11 已采纳

你可能已经预感到它是什么 - 你在第一句话中就放弃了

... 大型、复杂的应用程序 ...

听起来您在某处有 GDI 资源泄漏。 要确认这一点,请尝试在任务管理器中查找您的流程的 GDI 对象。 在某些时候,您的应用程序的大多数 GDI 操作都会失败。

确保正确释放所有手柄。 请注意,不同的 GDI 对象需要不同的释放对象方法。 例如GetDCReleaseDC释放,而CreateDCDeleteDC释放。

这就是为什么推荐 RAII 智能对象(如智能指针)用于 C++ 中的资源管理(其中释放由智能对象管理以减少泄漏和错误的可能性)。

#2楼 票数:5

我敢打赌,应用程序正在泄漏 GDI 对象,并且当此进程的 GDI 专用空间耗尽时,它无法再绘制自己。

您可以通过将GDI 对象列添加到Windows 任务管理器(或任何其他进程管理器,例如Process Monitor )来检查是否是这种情况,并查看该数字是否随时间无限增长。

#3楼 票数:0

您的应用程序实际上可能会遇到一个被忽略的异常。 请参阅Microsoft 知识库文章 976038

  ask by Jon Vance translate from so

未解决问题?本站智能推荐:

2回复

Windows 7 GUI参考

我使用Win32维护一个大型C ++应用程序,我想使用Vista / Windows 7中引入的一些新控件(新的ballon帮助,命令链接,状态栏通知。 我已经下载了Windows用户体验互动指南 ,但我找不到相应的API参考。 我知道其中一些控件将无法从核心Win32中获得 - 所以我
2回复

为什么EM_SETMARGINS在Windows 7下不起作用?

我有一个复合视觉控件,包括编辑框和下拉按钮。 下拉按钮不是窗口控件,而是通过编辑框绘制的。 我通过以下调用限制编辑的宽度: 它在Windows XP下工作正常,但在Windows 7下无效。在后一种情况下,当聚焦编辑框重叠下拉按钮并删除其图像时。 在两个操作系统下限制编辑框re
1回复

Windows 7 中 I-Beam 光标的热点不正确?

问题 在 Windows 上,为“鼠标按钮按下”事件返回的坐标对于 I-Beam 光标似乎略有错误。 基本上,x 坐标总是比它应该在的位置左两个像素。 我写了一个非常简单的 win32 程序来演示这个问题。 它所做的只是将光标变成 IBeam 并在最后一次鼠标按下事件所在的位置渲染一条垂直的红线。
1回复

为什么我的Win32程序不能绘制多次?

我正在尝试制作一个检测按键操作并在窗口上绘制相应字母的程序。 一切正常,但只绘制一次...当我按下另一个键时,什么也没发生。 Paint函数调用一个Char函数,该函数使用::Textout绘制字符。我不明白的是,为什么它绘制的次数不止一次
3回复

如何使Win 32应用程序作为Windows服务运行?

我们公司刚刚完成了一个Win 32 Application项目,我们有一个可执行程序,它在Windows中可以正常工作。 现在,我们必须在网络帐户下将其作为Windows服务运行。 我对Windows Service还是很陌生,所以请提出建议,我应该怎么做才能将该程序转换为Windows S
2回复

Windows 7上Win32应用程序的多点触控板

我正在开发使用多点触摸输入的Win32应用程序(Windows 7)。 我尝试了几种可在Windows上使用的多点触摸板,例如MSI starpad和Macbook pro内置触摸板(使用Bootcamp在Window 7中启动),但是它们都不产生Windows多点触摸或手势事件。 有谁知道
1回复

将 Win32/WinAPI 应用程序移植到 wxWidgets

我目前使用的是 Windows 10、MSVC v142(使用 VS2019)和 wxWidgets 3.1.3。 我有一个旧的 Windows C++ 应用程序,它使用 WinAPI 作为其 GUI 功能,即 Windows 消息循环,使用“CreateWindow”,并且必须“手动”创建所有窗口
1回复

适用于Windows 7的C和Win32中的WebSocket客户端

我试图找出一种使用Win32 API在C中实现示例WebSocketClient的方法。 我需要它与HTML + JS WebSocket服务器通信。 我看到只有Windows 8和更高版本才支持大多数WebSocket特定的API。 就像在WinHttpWebSocketComple