我有2個項目。一個是由C++ Builder構建的,沒有MFC風格。另一個是VC++ MFC 11.音頻關閉時線程很慢
當我創建一個線程並創建一個循環 - 比方說,這個循環將進度條位置添加一個 - 使用Sleep(10)
從1增加到100它當然適用於C++ Builder和C++ MFC。
現在,Sleep(10)
等待10毫秒。好。但問題是隻有打開媒體播放器,Winamp或其他任何能產生「聲音」的東西。如果我關閉了所有媒體播放器,winamp和其他聲音程序,我的線程就會慢於10毫秒。
需要像50-100 ms/each
。如果我打開任何音樂,它會按我的預期正常工作。
我不知道爲什麼會發生這種情況。我首先想到我在MFC應用程序中犯了一個錯誤,但爲什麼C++ Builder也放慢速度?
是的,我確信它是有聲的,因爲我甚至重新合成了我的窗戶,禁用了一切。最後我發現了這個問題。
我的代碼需要什麼嗎?
更新:
現在,我按照代碼,發現我在這些地區使用Sleep(1)
等待1毫秒。原因是,我從左向右移動一個對象。如果我消除了這種睡眠,那麼移動不會顯示出來,因爲它非常快。所以,我應該使用Sleep(1)
。與Sleep(1)
,如果音頻是在比它的工作。如果音頻是off比它慢很多。
for (int i = 0; i <= 500; i++) {
theDialog->staticText->SetWindowsPosition(NULL, i, 20, 0, 0);
Sleep(1);
}
因此,關於該建議是非常讚賞。我該怎麼辦?
我知道這是不正確的方法。我應該使用其他適當和有效的東西。但究竟是什麼?哪個功能或類能幫助我將靜態文本從一個位置平滑移動到另一個位置?
此外,更改線程優先級沒有幫助。
更新2:
更新1是另一個問題:)
有趣。當您注意到差異時,您的流程的優先級是否仍然相同? – Brad
過程的優先級是相同的。第二個有趣的是,如果我打開媒體播放器(但不播放音樂),我的線程程序以2%的CPU和線程工作運行。如果我關閉媒體播放器,立即減速並佔用CPU的0%。 – xangr
這可能是由於處理器限制了CPU的頻率。 – johnathon