mc.signal 信号槽机制
更新时间:2025/07/09
在Gitcode上查看源码针对异步操作提供的Lua信号槽机制,用于同Lua VM中的软件信号发送及处理。
加载方式
lua
-- 创建信号
local signal = require 'mc.signal'
local sig = signal.new()
接口说明
signal.on
描述
- 注册回调
参数
参数 | 类型 | 描述 | 是否必选 |
---|---|---|---|
cb | function | 回调函数 | 必选 |
回调函数的参数与信号发送的参数一致。
WARNING
回调函数中切换协程会导致其他回调函数的调用,因此回调函数应该是触发函数,非逻辑处理函数。
返回
- 信号槽对象本身
异常
- 无
示例
lua
sig:on(function()
-- todo
end)
signal.emit
描述
- 发送信号
参数
参数 | 类型 | 描述 | 是否必选 |
---|---|---|---|
... | function | combiner函数 | 可选 |
返回
- 如果有
combiner
函数,所有槽函数的返回值会被收集到一个数组中,将这个数组当作参数调用combiner
函数,将其返回值作为最终结果; - 如果没有
combiner
函数,最后一个槽函数的返回值就是最终结果。
异常
- 槽函数异常并不会阻断后续槽函数执行,异常信息被捕获收集到
errors
数组中,在所有槽函数执行完成后当作异常抛出。即某个槽函数有异常则整个emit
函数异常,但在抛异常前会将每一个槽函数执行一遍; - 当前错误引擎只支持一次抛一个错误。
emit
只抛出一个错误,其它错误打印到日志中。
示例
lua
sig:emit(...)
signal.is_empty
描述
- 判断信号是否存在回调
参数
- 无
返回
- 判断结果,类型为boolean
异常
- 无
示例
lua
local is_empty = sig:is_empty()
signal.is_running
描述
- 判断信号是否正在执行回调
参数
- 无
返回
- 判断结果,类型为boolean
异常
- 无
示例
lua
local is_running = sig:is_running()
signal.running
描述
- 获取正在执行的回调信息
参数
- 无
返回
- 信号槽对象
异常
- 无
示例
lua
local running = sig:running()
signal.reset
描述
- 清空信号的所有回调,并终止即将进行的回调
参数
- 无
返回
- 无
异常
- 无
示例
lua
sig:reset()