java实现时间同步_java中的时间同步

在for-loop中,我通过检索和处理车辆信息来控制基于模拟步骤的交通模拟器SUMO.为了确保我的程序“实时”模拟(1个模拟步骤= 1秒),我想在处理阶段之后睡眠我的程序,直到下一个步骤开始.为了获得更好的结果,我正在根据最初采用的参考时间戳计算时间戳.

循环看起来像这样:

System.out.println("start of traffic simulation ...");

for (int i = 0; i < stepCount; i++)

{

System.out.println("step: " + i);

// set before timeStamp

beforeTimeStamp = System.currentTimeMillis();

if (firstStep)

{

// get reference timeStamp

referenceTimeStamp = beforeTimeStamp;

firstStep = false;

}

else

{

// get next vehicleVector

vehicleVector = masterControl.traCIclient.simulateStep();

}

// process vehicleVector

// set after timeStamp

afterTimeStamp = System.currentTimeMillis();

processingTime = afterTimeStamp - beforeTimeStamp;

// calculate sleepTime

sleepTime = referenceTimeStamp + ((i + 1) * 1000) - afterTimeStamp;

// sleep for sleepTime ms

Thread.sleep(sleepTime);

}

System.out.println("end of traffic simulation ...");

这是一些变量的输出:

step: 0

beforeTimeStamp 1252317242565

reference time: 1252317242565

processing time: 394

test time: 1252317243565

afterTimeStamp 1252317242959

sleepTime: 606

step: 1

beforeTimeStamp 1252317242961

processing time: 665

test time: 1252317244565

afterTimeStamp 1252317243626

sleepTime: 939 (exspected: 1000 - 665 = 335)

如您所见,睡眠时间仅适用于第一个模拟步骤.我不知道这里可能出现什么问题.有人有想法吗?

BR,

马库斯

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值