如何在Windows中使用粗略的计时器分辨率编写Java Thread.sleep()



我有一个使用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);
}

相关内容

  • 没有找到相关文章

最新更新