WS_EX_COMPOSITED - 高CPU

时间:2012-05-15 15:48:52

标签: c++ windows winapi gdi double-buffering

我在我的应用程序中使用WS_EX_COMPOSITED样式,但它将CPU运行到100%,是否有办法停止我的应用程序绘制一段时间并仅在我需要时恢复? 有些人建议使用睡眠,但在WndProc的确切位置我会睡觉吗?

提前致谢。

2 个答案:

答案 0 :(得分:4)

请勿使用Sleep。几乎没有问题的解决方案。

根据我的经验,WS_EX_COMPOSITED确实可以占用CPU,但主要是XP。 Vista及以上版本的性能影响要小得多。但是,如果您的应用程序处于空闲状态,那么它将不会重新绘制。如果您的CPU是100%并且应用程序处于空闲状态,那么您在WM_PAINT处理时出错了。你所描述的听起来像一个无限循环的油漆循环。如果你做得对,即使你使用WS_EX_COMPOSITED,也不会发生这种情况。

关于进行双缓冲的正确方法,BeginBufferedPaint是在Vista及以上版本中实现此目的的现代方法。

答案 1 :(得分:0)

如果您睡眠应用程序的线程,它将使应用程序UI无响应。听起来我需要在自己的线程中实现绘图代码。然后,您可以在不影响应用程序其余部分的情况下休眠该线程,但我建议使用事件和WaitForSingleObject / WaitForMultipleObjects调用而不是sleep。