无论时钟周期如何,确保睡眠发生的最短睡眠时间?

Minimum time to sleep to ensure sleep occures regardless of clock cycle?

我知道时钟周期因操作系统和设置而异。如果我编写的代码想要相对自信(至少 95% 确定)睡眠发生,我可以用于睡眠的最短时间是多少,并且确信任何 computer/os 运行 代码会睡?

有没有办法保证至少睡一个 'clock cycle' 而不管这个周期在 java 中有多长?

你永远不应该尝试那样做。问问自己是否真的需要睡一个时钟周期。将您的实现与计时器捆绑在一起总是一个错误的决定。下面我给大家几个选择。

在游戏实现中使用类似于fps的机制

许多库已经实现了 fps 的概念。通常他们的实现已经抽象出每秒时钟和操作系统 limitations/details。您可以使用该概念并与平台无关。

这样您就可以通过使用更多或更少的 fps 来调整您的时间要求。

使用互斥。

为什么要休眠一个周期?那是非常短的时间。您可以尝试使用互斥锁而不是计时器来同步(如果是这样的话)。

另外,互斥量通常由硬件指令实现。这样可以保证它们是原子的。如果你真的需要休眠很短的时间,你可以锁定互斥量然后解锁它。老实说,根据定义(除非是 NOOP),您执行的任何代码都类似于休眠一个周期。您也可以使用 tmp = 1+1。这需要两条指令。

我建议使用互斥量。从你的问题来看,不清楚你为什么需要那个睡眠时间。

用户交互互斥

如果您需要等待用户交互(或任何外部事件,如请求),请锁定互斥量并仅在事件或用户输入可用时解锁。

导出定时器值

如果你真的想走计时器之路,我建议你实现一个执行长 for 循环的例程,然后你可以尝试从 运行 所花费的时间派生出你的计时器 for循环。

正如我之前所说,我认为这种方法不可靠,但它确实可靠。此外,我建议您还结合使用 Monte Carlo 可靠性技术和单元测试来保护此代码。您可以在 this article.

上阅读更多相关信息

最后一点,请注意 compiler/interpreter 可以进行的优化并破坏您的计时器。