在 3600 ticks 内执行 java 代码 X 次

Execute java code X times within 3600 ticks

我有一个时钟 class 运行 作为线程。多个生产者线程应根据所述时钟的滴答声生产对象。可以使用构造函数参数(双精度)配置生产者,例如productionRate = 550(意味着每 3600 个刻度有 550 个对象(每个刻度代表一秒,也就是一个小时)。

在下面的代码中,您可以看到小时费率转换为一个数字,该数字表示报价之间要经过多少报价。如果使用我的示例编号,那将是每 6,54 个滴答声执行一次。现在我找不到一种方法来定义 if 条件以真正根据速率产生,这在查看代码时应该很明显。目前,大部分时间都没有创建车辆,因为它不够精确。

int curTicks = this.clock.getTicks();
double realFeedRate = 1 / (this.vehicleFeedRate / 3600);

if ((curTicks % (int) Math.round(realFeedRate) == 0 || curTicks - lastExecutionTicks == 0))
{
    //Produce...
}

现在,是否有一种更简洁的方法来实现一致的生产率并在 3600 个滴答声(一个模拟小时)后创建 550 个(+- 只有少数)对象? 不幸的是,我需要使用我自己的时钟实现 class 并且不能使用 Java.

提供的任何计时器

您可以 save/calculate 下一个动作应该发生的时间,而不是检查您可能不会命中的确切刻度数。在某些时候,您将传递这个存储的 time/value 然后您知道您必须执行您的操作(例如添加您的对象)。伪代码如下所示:

long nextActionAfterTick;
nextActionAfterTick = /* calculate the next tick */;

while(/* your loop */)
{
    if (nextActionAfterTick < this.clock.getTicks()) {
    {
        doYourAction();
        nextActionAfterTick = /* calculate the next tick */;
    }
}