在处理 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/