java中的时间同步
发布时间:2020-12-15 05:18:51 所属栏目:Java 来源:网络整理
导读:在for-loop中,我通过检索和处理车辆信息来控制基于模拟步骤的交通模拟器SUMO.为了确保我的程序“实时”模拟(1个模拟步骤= 1秒),我想在处理阶段之后睡眠我的程序,直到下一个步骤开始.为了获得更好的结果,我正在根据最初采用的参考时间戳计算时间戳. 循环看起
在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, 马库斯 解决方法
为什么不睡1000 – 处理时间?这是你能得到正确答案的最接近的答案.
您的解决方案仅适用于第一步,因为它只适用于第一步.您假设您将在referenceTime开始处理每个步骤(步骤* 1000),但您不考虑开销(线程休眠,打印,垃圾收集).打印出referenceTimeStamp((i 1)* 1000) – beforeTimeStamp看看我的意思 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |