1

我有一个使用Thread.sleep(msUntilActionNeeded);. 该变量设置为毫秒数,直到我希望程序开始与一天中的时间一致的操作,所以它并不重要。即使关闭 5000 毫秒也不成问题,因此 10 毫秒的分辨率是多余的。

(次要)问题是 Windows 报告A program or service has requested a timer resolution smaller than the platform maximum timer resolution.

没有必要让计时器分辨率如此之小。我已将毫秒四舍五入到最接近的 10 毫秒的倍数,但没有明显效果。

如何更改我的程序或 JVM 设置以使请求的计时器分辨率不那么小?

4

2 回答 2

0

您无法直接从 Java 控制计时器分辨率。

出于更流畅的动画和其他原因,JVM 和/或其他应用程序有时会降低平台计时器分辨率。Java 不能让您控制平台计时器分辨率。

您确定 Java 运行时负责增加计时器分辨率吗?您是否尝试过使用另一个 JRE?

如果要更改计时器分辨率,则需要 JNI。但这是 Bruce Dawson 的一篇有趣的文,讲述了您不想增加计时器分辨率(浪费电力和计算能力)的原因。

于 2015-04-20T14:39:19.100 回答
0

有点莫名其妙。也许 int 溢出会产生负数?也许太小了?

if (msUntilActionNeeded < 0) {
    throw new IllegalStateException();
} else if (msUntilActionNeeded > 100L) {
    Thread.sleep(msUntilActionNeeded);
}
于 2015-04-20T15:03:01.020 回答