gpt4 book ai didi

c++ - 单独线程中的 GetDC 函数返回时间太长

转载 作者:行者123 更新时间:2023-11-28 05:53:03 31 4
gpt4 key购买 nike

我正在学习 OpenGL 并使用 Windows API 进行窗口化。我有一个渲染函数,最后它调用 SwapBuffers(deviceContext)

一开始我是用GetDC()来获取DC句柄的(像这样:SwapBuffers(GetDC(hWND)),很顺利(没有释放) .当我尝试将渲染移动到一个单独的线程时,它可以正常工作几百帧,在 GetDC() 显着减慢之后,返回时间不到 1 毫秒,然后突然超过 300 毫秒。这导致 FPS 降低。找到根本原因后,我改为在开始时存储一次 DC,并在退出时释放,现在可以正常工作了。

问题是为什么没有 ReleaseDC()GetDC() 在我从窗口类的一个单独的线程中调用它数百次时如此剧烈和突然地变慢?它不会在主线程中执行。

最佳答案

在 MSDN 文档中有解释:

GetDC function

After painting with a common DC, the ReleaseDC function must be called to release the DC. Class and private DCs do not have to be released. ReleaseDC must be called from the same thread that called GetDC. The number of DCs is limited only by available memory.

因此不应像这样使用函数:SwapBuffers(GetDC(hWND))。始终获取 HDC 句柄并调用 ReleaseDC 以避免资源泄漏。

该程序可能会顺利运行(至少有一段时间)但仍然会泄漏资源,最终会崩溃。

您可以在任务管理器中监控 GDI 泄漏。转到“进程”选项卡,选择“GDI 对象”列。

关于c++ - 单独线程中的 GetDC 函数返回时间太长,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34817284/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com