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

标签 c++ windows winapi wm-paint

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

相关文章:

c++ - 为什么在 const 指针中进行非法结构操作?

c++ - "C.UTF-8"Windows 上的 C++ 语言环境?

c++ - 来自 __FILE__ 的基本文件名

c++ - 如何纠正 GDI 资源泄漏?

c - 使用 MoveToEx 和 LineTo 为窗口制作边框

c - 低级控制台输入和重定向

c++ - 删除 vector<vector<Class>> 线程安全吗?

C++。我试图通过在开关中使用数组来获取用户输入,但是当我运行代码时它显示段错误?

c++无法通过指向该对象的指针将指针分配给该对象

c++ - 窗口名称未打印