中断
多例类 Interrupt 提供了创建中断对象的功能。中断对象可以通过 Runtime:register_interrupt 方法注册到中断列表中,进而在执行器运行期间进行中断处理。
概念
执行器中存在两种中断:可屏蔽中断(maskable interrupt)和不可屏蔽中断(non-maskable interrupt)。Runtime 中允许开发者开、关中断。关中断后,将不会触发可屏蔽中断,但不可屏蔽中断不受中断开关的影响。除了重要程度很高的中断事件,一般中断应设置为可屏蔽中断。
执行器的手动接管功能就采用不可屏蔽中断实现。
字段
name
说明:中断名称,类型为 string。
注解:构造时可缺省,缺省值为 "ANONYMOUS"。
handler
说明:中断处理函数,类型为 function。
注解:构造时可缺省,缺省时提供默认的空处理函数。
parameters
说明:中断处理函数接收的参数列表,类型为 any[]。
注解:构造时可缺省,缺省时提供空参数列表。
maskable
说明:中断对象可屏蔽性,类型为 boolean。
注解:构造时可缺省,缺省值为 true,即默认为可屏蔽中断。将不可屏蔽中断对象注册到 Runtime 的中断列表后,即使处于关中断状态,不可屏蔽中断对象依旧触发中断。
alive
说明:中断对象是否有效,类型为 boolean。
注解:构造时可缺省,缺省值为 true,即默认有效。
result
说明:最近一次执行 handler 的返回值。
注解:若 handler 无返回值,则此字段为 nil。
方法
new
说明:构造中断对象。
原型:Interrupt:new(init)
init:初始化列表,或中断处理函数,类型为table | function。当init为table时,表中可包含本文所述的name、handler、parameters、maskable、alive字段(其余字段丢弃);当init为function时,handler被设置为init,其余字段保持缺省值。
返回:中断对象,类型为 Interrupt。
注解:
is_alive
说明:判断中断对象是否有效(alive 字段)。
原型:Interrupt:is_alive
返回:若有效,返回 true;否则,返回 false。
is_maskable
说明:判断中断对象是否可屏蔽(maskable 字段)。
原型:Interrupt:is_maskable()
返回:若该中断可屏蔽,则返回 true;否则,返回 false。
kill
说明:“杀死”中断对象。
注解:调用后,相应中断的 alive 被置为 false。
handle
说明:调用构造时提供的中断处理函数 handler。
原型:Interrupt:handle()
返回:与 handler 保持一致。
注解:result 中也会保存 handler 的返回值。若 handler 存在多个返回值,result 则将其封装为列表。
get_result
说明:获取最近一次中断处理结果(即 result)。
原型:Interrupt:get_result()
返回:中断处理结果。对于单个返回值,类型与 handler 返回值类型相同;对于多个返回值,result 则将其封装为列表。