2011-08-31 46 views
0

我目前正在用C++編寫Windows遊戲。服務器對應在最開始時創建兩個附加線程。其中一個處理接收新數據,另一個處理遊戲中對象的運動計算。我設法找出的是,最後一個線程函數(稱爲TickFunc)是一個減慢速度的函數。我的音樂凍結了,我無法在瀏覽器中打開新標籤,一切都很慢並且凍結。即使我將TickFunc中的所有內容註釋掉(留下一個永久執行的空while循環),它仍然會凍結,但如果我根本不創建該線程,那很好。無論TickFunc內執行的計算強度如何,它似乎都會降低系統速度。我真的很感激任何有關可能導致這種情況的提示。謝謝。創建新線程時,Windows XP顯着減慢

問候, Neob91

+0

您是否有機會以高於正常優先級的方式創建該線程? – eran

+0

「留下一個永久執行的空while循環」是減慢所有其他線程的最佳方式。 –

+0

不,線程以默認優先級創建,即THREAD_PRIORITY_NORMAL。我甚至嘗試減少優先級,儘管它的工作速度太慢,即使將其設置爲THREAD_PRIORITY_BELOW_NORMAL。 – Neob91

回答

2

把一個小的延遲你的無限循環中。

+0

我有一個延遲,我有一個deltatime變量,告訴我從循環內我的代碼的最後一次執行後已經過了多少時間。 'clocks = clock(); deltatime = double(clocks - oldclocks)/ CLOCKS_PER_SEC; if(deltatime <0.2) { continue; }' – Neob91

+0

@ Neob91-顯然延遲是不夠的,如果你看看在你的Windows任務管理器的性能選項卡我打賭你會發現你的CPU語言接近100% –

+0

@ Neob91:這不是正確的方式來推遲。該線程應該調用'Sleep()'。 – wallyk