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

用户名

处理WM_PAINT消息时,我省略了BeginPaint和EndPaint调用,并且CPU使用率猛增到100%。为什么是这样?

我也在使用工作线程...但是它们做的是不同的事情,似乎对这件事没有影响。

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

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

谢谢

汉斯·帕桑特

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

如果您不这样做,Windows会立即生成另一个WM_PAINT消息,仍然尝试清空更新区域。您的线程将消耗100%的内核,闲置地处理WM_PAINT消息,而实际上没有完成任务。也许您实际上是在绘画,Windows只是不知道您所绘画的内容,并且不会尝试猜测它。

使用Begin / EndPaint()是完成这项工作的理智之举。这不是唯一的方法,您也可以调用ValidateRect()或ValidateRgn()。只要您是“ winapi新手”,我强烈建议您以常规方式进行此操作。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章