繁体   English   中英

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

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

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM