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