簡體   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