ct

WatchDog

WatchDog 的作用是刷新显示,不会影响仿真进程。

使用

创建 WatchDog 实例

local watchdog = WatchDog(simv, ActionObjs, [{isImmediateStop=}]) -- 创建watchdog的实例

参数:

刷新显示

令 Watchdog 开始刷新场景显示,一般情况下,只用在仿真开始时调用一次即可。

watchdog.refresh()

可以向 refresh 中注入函数,在每次刷新场景之间都执行该函数

function()
    -- do something
end

watchdog.refresh(f)

工作模式

WatchDog 根据 CPU 运行时间,通过coroutine.queue()添加到协程队列中。通过不断递归调用实现定时唤醒刷新。

WatchDog 每次唤醒都会执行agent:execute(),刷新所有对象的状态,然后刷新显示。

graph
invoke(coroutine唤醒)
execute(刷新所有Agent的状态)
recycle(检查回收recycle)
render(刷新显示render)
run_command(检查运行许可)
refresh_clock(更新时钟、计算运行时间)
queue(预定下一次唤醒刷新)
stop(结束刷新)

invoke --> execute --> recycle --> render --> run_command -->|继续运行| refresh_clock --> queue
queue -->|等待coroutine唤醒|invoke
run_command --->|停止运行|stop

现象

回收延迟:目前由于不认为回收会对仿真造成影响,因此把回收放在 WatchDog 中进行。

如果有特殊需求可以按需修改。

运行中主要的变量