【问题标题】:Win32 app suspends on minimize window animationWin32 应用程序在最小化窗口动画时暂停
【发布时间】:2009-04-15 16:37:25
【问题描述】:

第一次在这里发布海报。

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

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

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

将我的进程的优先级调整为“高”和“实时”没有帮助。

谁能帮助阐明这个话题?

【问题讨论】:

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


    【解决方案1】:

    这些动画,或在拖动窗口时绘制窗口 (这应该会产生类似的问题)淹没 带有 WM_PAINT 消息的 windows 消息提示,并导致 窗口中的每个小部件/控件都可以重绘自身。 这会使计算机和所有线程完全陷入困境 以及在其上运行的进程。

    两种可能的解决方案:

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

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

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

    • 为您的音频使用更大的缓冲区。如果您可以通过一半或完整的缓冲区 一口气仅次于声卡,您绝对应该在多线程环境中保持安全

    REEDIT:好吧,我忽略了你说的 any 窗口。只有使用更大缓冲区的解决方案 2 可能会有所帮助。 声音缓冲区通常会被扔到硬件上的某个缓冲区中,一旦它们在那里,应该没问题。

    想到另一种可能性: 这些动画带有声音。看看你是什么声音 已设置为最大化/最小化。把它关掉再试一次

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

    【讨论】:

    • 好的。最后一个编辑来自评论:我只记得,无论动画如何都会播放声音,你说它当时有效。动画会刺激你的 CPU 吗?
    • 第二种解决方案似乎更有可能。 (Spy++ 显示每分钟/恢复大约 3-6 条绘制消息)是的,我正在使用 dsound/软件缓冲区。更大的音频缓冲区确实有帮助,但总体问题是向 dsound 传输音频的其他线程正在暂停 - 传输实时语音。
    • 不。 CPU 在窗口动画期间处于空闲状态。
    • 另外,windower 最小化/最大化/恢复向上/恢复向下声音是“无”。
    • 该死的。 :|我想这不会发生在我们说的 Skype 或 TeamSpeak 中,是吗?
    猜你喜欢
    • 2016-07-25
    • 1970-01-01
    • 2011-05-27
    • 2018-08-24
    • 2020-09-16
    • 2012-09-09
    • 1970-01-01
    • 2016-09-12
    相关资源
    最近更新 更多