簡體   English   中英

如何在Windows中使用粗略的計時器分辨率編碼Java Thread.sleep()

[英]How to code Java Thread.sleep() in Windows with coarse timer resolution

我有一個使用Thread.sleep(msUntilActionNeeded);的應用程序Thread.sleep(msUntilActionNeeded); 在我希望程序開始與一天中的某個時間一致的操作之前,將變量設置為ms數,因此這不是至關重要的。 即使距離5000毫秒也不會有問題,因此10毫秒的分辨率實在是太過分了。

(次要)問題是Windows報告A program or service has requested a timer resolution smaller than the platform maximum timer resolution.

不必將計時器分辨率設置得如此之小。 我將ms舍入到10ms的最接近倍數,沒有明顯效果。

如何更改程序或JVM設置以使之達到要求的計時器分辨率不那么小?

您不能直接從Java控制計時器分辨率。

出於平滑動畫和其他原因,JVM和/或其他應用程序有時會降低平台計時器分辨率。 Java無法讓您控制平台計時器的分辨率。

您確定Java運行時負責增加計時器分辨率嗎? 您是否嘗試過使用其他JRE?

如果要更改計時器分辨率,則需要JNI。 但是,這是布魯斯·道森(Bruce Dawson)的一個有趣的博客文章 ,內容涉及為什么您不想提高計時器分辨率(浪費電子和計算能力)的原因。

有點困惑。 也許int溢出產生負數? 也許太小了?

if (msUntilActionNeeded < 0) {
    throw new IllegalStateException();
} else if (msUntilActionNeeded > 100L) {
    Thread.sleep(msUntilActionNeeded);
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM