mc.signal 信号槽机制
更新时间:2025/07/09
在Gitcode上查看源码

针对异步操作提供的Lua信号槽机制,用于同Lua VM中的软件信号发送及处理。

加载方式

lua
-- 创建信号
local signal = require 'mc.signal'
local sig = signal.new()

接口说明

signal.on

描述

  • 注册回调

参数

参数类型描述是否必选
cbfunction回调函数必选

回调函数的参数与信号发送的参数一致。

WARNING

回调函数中切换协程会导致其他回调函数的调用,因此回调函数应该是触发函数,非逻辑处理函数。

返回

  • 信号槽对象本身

异常

示例

lua
sig:on(function()
    -- todo
end)

signal.emit

描述

  • 发送信号

参数

参数类型描述是否必选
...functioncombiner函数可选

返回

  • 如果有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()