我有一个用 C++(没有 MFC 或 .NET)编写的大型复杂应用程序。最积极地使用该软件的客户端将在启动它的一个小时左右内进入所有窗口停止绘制的状态。我们收到有关应用程序“挂起”的报告,因为据他们所知,没有任何事情发生。实际上,应用程序正在运行,只是没有显示任何内容。
我尝试了很多不同的东西都无济于事。我没主意了...
最佳答案
你可能已经预感它是什么——你在第一句话中就给出了它
... large, complex application ...
听起来您在某处有 GDI 资源泄漏。要确认这一点,请尝试在任务管理器中为您的进程查看 GDI 对象。在某些时候,您的应用程序的大多数 GDI 操作都会失败。
确保正确释放所有 handle 。请注意,不同的 GDI 对象需要不同的释放对象的方法。例如
GetDC
被 ReleaseDC
释放, 但是 CreateDC
被 DeleteDC
释放.这就是为什么建议将 RAII 智能对象(如智能指针)用于 C++ 中的资源管理(其中释放由智能对象管理以减少泄漏和错误的可能性)。
关于winapi - Win32 应用程序窗口最终停止在 Windows 7 上绘制,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12459213/