[英]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.