Delay块移除代码中getElapsedTime始终返回0的问题排查求助
问题原因及解决办法
为什么delayX.getElapsedTime(agent)返回0?
当Delay块触发“移除时”事件时,智能体已经被移出该块的内部管理队列/处理状态,此时getElapsedTime()方法已经无法读取到该智能体在块内的有效计时数据,所以返回0。
正确获取等待时长的方法
直接在智能体进入Delay块时记录时间戳,移除时计算时间差即可:
- 给你的智能体添加一个double类型的参数,比如命名为
enterDelayTime。 - 在delayX的「进入时」代码段中写入:
agent.enterDelayTime = time(); - 在delayX的「移除时」代码段中计算等待时长:
double waitDuration = time() - agent.enterDelayTime;
这样就能准确得到智能体在delayX中实际等待的时长。
如果你的Delay块是使用固定/动态设置的等待时长(而非条件触发移除),也可以直接调用Delay块的getWaitTime()方法获取设置的时长,但如果是基于事件或条件提前移除的场景,上面的时间戳方法更可靠。
内容的提问来源于stack exchange,提问作者Si Chen
相关产品推荐
相关产品推荐

