如何让JBotSim节点等待拓扑结构完全定义后再启动算法
JBotSim手绘拓扑算法不同步问题解决方案
- 方法一:暂停全局时钟,绘制完成后再恢复
该方案侵入性最低,无需修改算法逻辑。初始化拓扑实例时直接暂停时钟,此时新增的节点不会触发算法执行:
Topology topology = new Topology(); // 暂停全局时钟,停止所有算法调度 topology.getTimeManager().pause();
你完成所有节点、边的绘制后,再调用恢复时钟的方法即可让所有节点同步启动算法:
topology.getTimeManager().resume();
你可以给画布组件添加自定义的「绘制完成」按钮,把恢复时钟的逻辑绑定到按钮点击事件上即可。
- 方法二:添加全局启动判定位
如果需要保留时钟的其他调度逻辑,可以自定义全局启动标志位。你可以将标志位存在拓扑实例的属性中,所有节点的算法核心逻辑执行前先校验该标志位:
// 初始化时设置启动标志位为false topology.setProperty("algorithm_running", false);
节点算法的执行逻辑中添加判定:
@Override public void onClock() { if (!(boolean) getTopology().getProperty("algorithm_running")) { return; } // 原有算法逻辑 }
你完成全图绘制后,修改标志位即可统一触发所有节点的算法执行:
topology.setProperty("algorithm_running", true);
- 方法三:关闭自动启动配置
部分JBotSim版本支持直接禁用节点添加自动启动的逻辑,初始化拓扑时调用disableAutoStart()方法,所有节点添加完成后手动调用start()方法统一启动即可。
内容的提问来源于stack exchange,提问作者Akka ZEMMARI
相关产品推荐
相关产品推荐

