我有一个使用Thread.sleep(msUntilActionNeeded);
的应用程序。 该变量设置为毫秒数,直到我希望程序开始与一天中的时间一致的操作,因此它并不重要。 即使偏差 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);
}