[英]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.