Win32应用程序暂停最小化窗口动画

时间:2009-04-15 16:37:25

标签: c++ windows animation window windows-xp

这里的第一次海报。

我正在Windows XP SP2上用C ++(MSVC)编写多线程流音频应用程序。

我遇到的问题是,在最小化/恢复任务栏上的任何应用程序时,我的应用程序中的所有线程都会在窗口动画处于活动状态时暂停。这会影响我,因为每次窗口最小化或恢复时,它都会导致应用程序中的音频断断续续。

在Windows /系统属性/高级/性能“视觉效果,处理器调度......”/“设置/自定义”选项卡中取消选中标题为“在最小化最大化时动画窗口”的复选框似乎可以解决此问题。

将我的流程优先级调整为“高”和“实时”无济于事。

任何人都可以帮助阐明这个话题吗?

1 个答案:

答案 0 :(得分:3)

这些动画,或在拖动窗口时绘制窗口 (这应该会产生类似的问题)洪水泛滥 带有WM_PAINT消息的Windows消息提示,以及原因 窗口中的每个小窗口小部件/控件都可以重绘自己。 这可能完全陷入计算机和所有线程 和在其上运行的进程。

两种可能的解决方案:

  • 冻结你的窗口,这会丢弃任何WM_PAINT消息 窗口正在调整大小/最小化/被拖动。你也可以这样做 通过使用某种标志(lockRedraw)或类似的。

    • 更改优先级对您没有帮助,甚至可能会增加问题 虽然我对wxp的调度策略一无所知。

编辑:忘记了实际的第二个解决方案:

  • 为您的音频使用更大的缓冲区。如果你可以传递一半或全部的缓冲区 一举成为声卡的第二名,你绝对应该在多线程环境中保持安全。

REEDIT:我忽略了你说任何窗口。只有使用更大缓冲区的解决方案2可能对此有所帮助。 声音缓冲区通常被抛入硬件的某个缓冲区,一旦它们存在,就应该没有问题。

另一种可能性出现在脑海中: 这些动画都是声音。检查你是什么样的声音 已设置最大化/最小化。关闭它然后重试

如果问题仍然存在,可能是因为显卡驱动程序不佳。 如果没有,请查看您的声音(可能是directSound?不知道)设置是否全部有序。也许你可以编写一些资源冲突。 (不是在硬件管理器中,而是以访问声音设备的方式。)