2017-07-16 197 views
0

一般來說,使用while循環作爲定時/等待機制是一種很好的做法。如果您需要高精確度,並且僅需要幾毫秒就會被阻止。可以使用while循環作爲計時機制嗎?

我目前正在編寫Java/Scala遊戲循環,但這個問題並沒有針對特定的情況。我理解它總是取決於情況是否是一個好主意,但我問是否合理地在合理的情況下是一個好主意。

編輯:

如果你認爲這是一個壞主意,請提供,將保持精度高量的一種替代。簡單地使用系統定時器可以給出巨大的變化(至少在Java中它是這樣),這是一個交易斷路器。

+0

我會說不......通過計算的延遲被使用,因爲沒有別的,現在它是非常糟糕的,因爲你需要爲每個CPU速度創建一個版本。如果其他程序正在使用循環,它將不流利。 – maraca

+0

幾毫秒是處理器的大量時間。如果你想要這麼大的延遲,你應該睡覺。紡紗是可以的,並且通常可以選擇較小的時間間隔,而您可能不想放棄CPU。 – PSkocik

回答

1

執行時間不是恆定的,取決於許多因素,如CPU速度,OS(CPU的分時產生不同的結果)等。此外,一臺機器可以每秒鐘執行10e9個週期,毫秒之間的時間是巨大的。對於定時器是非常糟糕的主意,請嘗試使用您的語言或Os的計時器。

3

創建一個循環來延遲執行是延遲線程的最糟糕的方式之一,因爲它會佔用CPU。而不是這樣做,你可以使用:

Thread.sleep(milliseconds); 

它根本不消耗CPU。但是,您應該記住,使用線程的函數並不是絕對準確的,因此睡眠函數參數中給出的時間可能比您輸入的時間多一點,但是它很少,可以輕鬆忽略。