gpt4 book ai didi

c++ - WinAPI:在 WM_PAINT 中省略 BeginPaint 和 EndPaint 会导致 100% CPU 使用率

转载 作者:行者123 更新时间:2023-12-01 14:31:21 26 4
gpt4 key购买 nike

在处理 WM_PAINT 消息时,我省略了 BeginPaint 和 EndPaint 调用,CPU 使用率飙升至 100%。这是为什么?

我也在使用工作线程......但是他们做了一些不同的事情并且似乎对这件事没有影响。

此外,我可以使用 GetDC() 的设备上下文而不是 BeginPaint 吗?他们似乎有不同的值(value)观,所以我认为他们有不同的工作。

抱歉,如果我听起来像个白痴 - 我是 WinAPI、C++ 和一般逻辑世界的新手...

谢谢

最佳答案

这是完全正常的。当窗口的更新区域不为空时,Windows 会生成 WM_PAINT 消息。您应该 做的是再次将其标记为空。例如,您可以通过调用 Begin/EndPaint() 来实现。

如果您不这样做,Windows 立即 生成另一个 WM_PAINT 消息,仍然试图清空更新区域。您的线程将消耗 100% 的核心资源,无所事事地处理 WM_PAINT 消息,而实际上并没有完成工作。也许您确实在绘画,Windows 只是不知道您画了什么,也不会尝试猜测。

使用 Begin/EndPaint() 是完成该工作的非常明智的方法。这不是唯一的方法,您还可以调用 ValidateRect() 或 ValidateRgn()。只要您是“winapi 新手”,我强烈建议您以正常方式执行此操作。

关于c++ - WinAPI:在 WM_PAINT 中省略 BeginPaint 和 EndPaint 会导致 100% CPU 使用率,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21354405/

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