CE Lua 可清理的练习工具
把读数、按钮和定时器组合起来时,最容易忽略对象关闭顺序。本篇提供一个只显示提示和计数的练习工具,帮助你先验证生命周期。
最小练习脚本
在一个 Lua Engine 窗口运行下列例子。它不读取或修改任何进程,只创建窗口和定时器:
local form = createForm(false)
form.Caption = "计时练习"
form.Width, form.Height = 300, 150
local button = createButton(form)
button.Caption = "开始"
button.Left, button.Top = 20, 20
local timer = createTimer(form, false)
timer.Interval = 1000
local count = 0
timer.OnTimer = function()
count = count + 1
print("计数: " .. count)
end
button.OnClick = function() timer.Enabled = true end
form.OnClose = function()
timer.Enabled = false
return caFree
end
form.show()
理解对象归属
timer 的 owner 是 form,窗口释放时由所有者管理 timer;关闭回调先停用计时器,避免继续触发。按钮同样由窗体拥有。caFree 表示关闭时释放窗体。若改成 createTimer(nil, false),则需要自己确保在关闭时销毁,不能假定窗体会释放它。
怎样扩展为只读工具
确认官方 Tutorial 的当前进程并建立经过验证的地址表记录后,可在定时器回调中查找记录并显示值。每次检查记录是否存在、值能否解析;进程切换或读取失败时停用并显示错误。不要把示例符号或硬编码地址当成跨版本有效地址。
检查关闭与重复运行
点击开始后观察输出逐秒增加;关闭窗口后输出应停止。重新运行后只应创建新的窗口和一套回调,若出现多次输出,应查找是否保留了上次无 owner 的热键或计时器。本示例作为教学代码,具体表现仍应在本机 CE 版本中验证。
进一步验证
练习完成后可以增加一个停止按钮,让它只把计时器设为关闭,再观察输出是否停止;再次点击开始应恢复输出而不是创建第二个计时器。若以后增加热键,把创建出的对象引用保存在与窗口相同的生命周期内,并在关闭时显式销毁。阅读已有示例时还要检查窗体关闭动作返回值、控件所有者和回调引用,逐一确认不存在关闭后继续运行的对象。
在同一窗口反复点击开始时,示例只启用同一个计时器;它不会重新调用创建函数。要让窗口明确展示当前状态,可以在按钮回调中修改按钮文字,在关闭前仍按原顺序停用定时器。不要把仅在当前 Lua 窗口中的局部变量当作其他窗口能访问的共享配置;重新运行脚本会建立新的一组对象。
先完成只输出计数的练习,再添加目标读取。每次扩展后重新检查关闭窗口时是否停止回调,确认失败时也能恢复到可重复操作的状态。