This shows you the differences between two versions of the page.
Both sides previous revision Previous revision Next revision | Previous revision Next revision Both sides next revision | ||
api:event:zh [2023/10/12 17:53] hfsr [函数] |
api:event:zh [2023/11/29 12:36] hfsr [概述] |
||
---|---|---|---|
Line 10: | Line 10: | ||
- 让程序在作为前台程序执行时处理事件(优先模式)。 | - 让程序在作为前台程序执行时处理事件(优先模式)。 | ||
- | 在驱动模式下,你需要在程序中为事件注册回调(callback)函数(用 `event.listen()`函数),然后退出程序,以继续执行原先的程序(通常是shell)。 | + | 在驱动模式下,你的程序需要先为事件注册回调函数(用 `event.listen()`函数),然后退出,以继续执行主程序(通常是shell)。 |
- | 而在优先模式下,你无需在程序中注册事件,可以直接使用`events.pull()`函数进行处理。 | + | 在优先模式下,你无需在程序中注册事件,可以直接使用`events.pull()`函数拉取并处理信号。 |
- | //注意://虽然从技术层面上讲可以同时使用两种工作模式,但不推荐这样做。为了保证所有已注册的函数都能接收到事件,事件的一次触发只有在所有函数都被调用后才算结束。因此如果你将处理函数(handler)进行了注册,又执行了拉取(pull)操作,那么同一个事件会被响应两次。 | + | **注意:**虽然从技术层面上讲可以同时使用两种工作模式,但不推荐这样做。为了保证所有已注册的函数都能接收到事件,事件只有在所有函数均被调用后才会被消耗掉。因此如果你注册了处理函数,同时又进行了拉取,那么同一个事件会被响应两次。 |
===== 函数 ===== | ===== 函数 ===== | ||
Line 115: | Line 115: | ||
===== 通用事件处理函数 ===== | ===== 通用事件处理函数 ===== | ||
- | 此处提供了一个较好的通用事件处理函数。此样例的主要功能是以`event.pull()`函数返回的事件ID作为回调函数列表的键,用元方法来处理未定义事件。请注意`event.pull`函数会让程序进入等待状态,直到出现可用事件。 | + | 此处提供了一个较好的通用事件处理函数。此样例中以`event.pull()`函数返回的事件ID作为回调函数列表的键,用元方法来处理未定义事件。请注意`event.pull`函数会让程序进入等待状态,直到出现可用事件。 |
```lua | ```lua | ||
Line 128: | Line 128: | ||
--存储所有事件处理函数的列表 | --存储所有事件处理函数的列表 | ||
- | --会返回占位假函数unknownEvent,以防无法匹配 | + | --会返回占位伪函数unknownEvent,以防无法匹配 |
local myEventHandlers = setmetatable({}, { __index = function() return unknownEvent end }) | local myEventHandlers = setmetatable({}, { __index = function() return unknownEvent end }) | ||
Line 152: | Line 152: | ||
- | 如果程序以驱动模式运作,你需要注册事件作为替代。可以将所有事件注册到像上面样例一样的全局事件处理函数,也可以将每个事件注册到对应的处理函数。如果你希望上面的样例在后台运行,`while running do`循环需要替换为类似下面的代码: | + | 如果程序以驱动模式运作,你需要注册事件而不是拉取事件。你可以将所有事件注册到像上面样例一样的全局事件处理函数,也可以将每个事件注册到对应的处理函数。如果你希望上面的样例在后台运行,`while running do`循环需要替换为类似下面的代码: |
```lua | ```lua | ||
event.listen("key_up", handleEvent) --注册handleEvent函数,使其在key_up事件发生时被调用,然后结束程序 | event.listen("key_up", handleEvent) --注册handleEvent函数,使其在key_up事件发生时被调用,然后结束程序 | ||
``` | ``` | ||
- | 也可以直接注册`myEventHandlers.key_up`,这样的话它会额外收到一个参数(事件名称)作为第一个参数。 | + | 也可以直接注册`myEventHandlers.key_up`,这样的话处理函数(`key_up`函数)会额外收到一个参数(事件名称)作为第一个参数。 |
目录 | 目录 | ||
----------- | ----------- | ||
{{page>api:contents:zh&noheader&noeditbutton&nouser&nofooter}} | {{page>api:contents:zh&noheader&noeditbutton&nouser&nofooter}} |