1

我在我的应用程序中使用 WS_EX_COMPOSITED 样式,但它运行 CPU 到 100%,有没有办法停止我的应用程序绘图一段时间并仅在我需要时恢复?有些人建议使用睡眠,但我究竟在 WndProc 中的哪个位置放置睡眠?

提前致谢。

4

2 回答 2

4

不要使用Sleep. 这是几乎没有问题的解决方案。

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

至于进行双缓冲的正确方法,BeginBufferedPaint是在 Vista 及更高版本上执行此操作的现代方法。

于 2012-05-15T19:04:33.557 回答
0

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

于 2012-05-15T18:53:26.677 回答