繁体   English   中英

随机应用程序在Windows XP(32位,SP3)播放声音时暂停半秒钟

[英]random Application suspended for half a second when Windows XP (32bit, SP3) plays a sound

我注意到,当Windows(至少是我的)多核机器(不是虚拟机箱)播放声音时,不同程序的执行有时会延迟半秒。 我测试了3种不同的计算机硬件配置 我还写了一个小的c ++测试应用程序来重现这个问题。 它只是在内存中计算出几兆字节的废话,并输出为此付出的时间。 这是在循环中完成的,因此您可以不断获得输出。 我上传了这个测试程序(包括自编译的源代码,例如Minco的GCC 4.7.2,如果你害怕可执行文件中的恶意软件)到这里: http//daiw.de/share/PrintCalculationTimes.zip

在以下屏幕截图中,您可以看到在执行程序时播放声音时(通过控制面板中的声音设置)会发生什么: http//daiw.de/share/PrintCalculationTimesWithoutSound.png

http://daiw.de/share/PrintCalculationTimesWithSoundWithAnnotations.png (每次点击播放按钮都不会发生这种情况,但只需多次点击就可以很容易地在我的测试PC上重现。)

这是一个众所周知的问题吗? 有人可以用我提供的测试案例证实这一观察结果吗?

感谢您的关注。

DOBI

我看到的是16ms的抖动,而不是半秒的延迟。 此外,我看到它独立于任何播放的声音(即使在您的屏幕截图中,这似乎是这种情况)。

如果播放一些声音阻止(非背景优先)线程运行,那真的会让我感到惊讶。 对于成千上万的计算机游戏来说,这将是一个严重的问题,所有这些游戏都需要流畅的动画和播放声音。

考虑到16ms是您在系统上使用的计时器的默认分辨率,结果并不奇怪。 这正是你所期待的。

如果有的话,请尝试使用std::chrono::high_resolution_clock timeBeginPeriod(1) std::chrono::high_resolution_clock timeBeginPeriod(1) ,或者在程序开头添加timeBeginPeriod(1) (需要-lwinmm )。

(请注意, timeBeginPeriod(1)使调度程序更频繁地在全局执行,不仅在程序中执行,而且不仅仅在程序的生命周期内执行。如果您使用笔记本电脑并使用电池运行,您可能需要在测试后重新启动才能保存通常,使用endTimePeriod(1)可以重置为正常,但是因为终止程序是终止程序无法工作的唯一方法。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM