Logitech Lua脚本故障:按键按下启动循环松开无法停止
Logitech Lua脚本循环无法终止的问题修复
问题根源
原脚本的核心问题是:OnEvent函数是事件驱动的,当按下G1触发G_PRESSED事件进入循环后,函数会一直卡在repeat-until循环里,无法响应后续的G_RELEASED事件——循环内的event变量始终是触发循环时的G_PRESSED值,不会自动更新,导致永远无法触发break或满足until条件。
正确实现方案
需要用全局变量标记循环状态,配合非阻塞的循环逻辑,让脚本能同时响应按键松开事件:
local is_loop_running = false -- 全局变量标记循环运行状态 function OnEvent(event, arg) -- 按下G1时启动循环 if event == "G_PRESSED" and arg == 1 then is_loop_running = true OutputLogMessage("Start Loop\n") -- 循环逻辑:通过全局变量控制启停 while is_loop_running do OutputLogMessage("Loop\n") Sleep(100) -- 必须添加Sleep,避免占用100%CPU,同时给脚本处理其他事件的间隙 end OutputLogMessage("End Loop\n") -- 松开G1时终止循环 elseif event == "G_RELEASED" and arg == 1 then is_loop_running = false end end
关键要点
- 全局状态变量:
is_loop_running用来跨事件传递状态,松开按键时修改该变量,循环内会实时检测到并退出。 - Sleep函数:必须添加,一方面降低CPU占用,另一方面让脚本有时间处理
G_RELEASED事件,否则循环会一直占用线程,无法响应松开操作。
内容的提问来源于stack exchange,提问作者Diogo
相关产品推荐
相关产品推荐

