gpt4 book ai didi

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

转载 作者:塔克拉玛干 更新时间:2023-11-03 02:04:04 24 4
gpt4 key购买 nike

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

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

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

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

感谢您的关注。

多比

最佳答案

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

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

考虑到 16 毫秒是您在系统上使用的计时器的默认分辨率,结果一点也不奇怪。这正是您所期望的。

如果有的话,请尝试使用 std::chrono::high_resolution_clock 代替,或者在程序的开头放置一个 timeBeginPeriod(1)(需要 - lwinmm).

(请注意,timeBeginPeriod(1) 使调度程序全局执行得更频繁,不仅在您的程序中,而且不仅在程序的生命周期内。如果您使用笔记本电脑并使用电池运行,您可能需要在测试后重新启动以节省电池电量。通常,可以使用 endTimePeriod(1) 重置为正常状态,但由于终止进程是结束的唯一方法你的程序将无法运行。)

关于c++ - Windows XP(32 位,SP3)播放声音时随机应用程序暂停半秒,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13679765/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com