【问题标题】:WS_EX_COMPOSITED - high CPUWS_EX_COMPOSITED - 高 CPU
【发布时间】:2012-05-23 04:17:19
【问题描述】:

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

提前致谢。

【问题讨论】:

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


    【解决方案1】:

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

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

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

    【讨论】:

      【解决方案2】:

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2013-01-31
        • 2018-10-22
        • 2015-05-18
        • 2017-12-14
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多