Class flgsp
XWLUA类:事件标志对象强指针
事件标志对象强指针是Lua语言中的一种 userdata
,用于 强引用 XWOS的事件标志对象。
强引用 表示会增加XWOS的事件标志对象的 引用计数 。
MetaMethods
flgsp:metatable.__copy (flgsp, vm) | 元方法:__copy |
flgsp:metatable.__gc (flgsp) | 元方法:__gc |
flgsp:metatable.__tostring (flgsp) | 元方法:__tostring |
Methods
flgsp:bind (flgsp, sel, pos) | 绑定事件标志对象到信号选择器 |
flgsp:unbind (flgsp, sel) | 从信号选择器上解绑事件标志对象 |
flgsp:bmp (flgsp) | 新建位图,位的数量与事件标志中的事件数量相等 |
flgsp:num (flgsp) | 获取事件标志中事件(位)的数量 |
flgsp:read (flgsp) | 读取事件标志 |
flgsp:s1m (flgsp, msk) | 同时设置多个事件标志位 |
flgsp:s1i (flgsp, pos) | 设置单个事件标志位 |
flgsp:c0m (flgsp, msk) | 同时清除多个事件标志位 |
flgsp:c0i (flgsp, pos) | 清除单个事件标志位 |
flgsp:x1m (flgsp, msk) | 同时翻转多个事件标志位 |
flgsp:x1i (flgsp, pos) | 翻转单个事件标志位 |
flgsp:wait (flgsp, trigger, consumption, origin, msk) | 等待触发事件 |
flgsp:trywait (flgsp, trigger, consumption, origin, msk) | 检查事件标志 |
flgsp:wait_to (flgsp, trigger, consumption, origin, msk, to) | 限时等待事件标志对象的触发事件 |
MetaMethods
- flgsp:metatable.__copy (flgsp, vm)
-
元方法:__copy
将事件标志对象强指针拷贝到全局导出表 xwxt 中。
此元方法意味着事件标志对象的强引用多了一个, 引用计数 加 1 。
Parameters:
- flgsp userdata (in) 事件标志对象强指针
- vm userdata (in) 目标虚拟机
Usage:
flgsp = ... -- 创建事件标志的代码(省略) xwxt.someflg = flgsp -- 事件标志对象的引用计数加1 flgsp2 = xwxt.someflg -- 事件标志对象的引用计数加1 xwxt.someflg = nil -- 事件标志对象的引用计数减1
- flgsp:metatable.__gc (flgsp)
-
元方法:__gc
事件标志对象强指针的垃圾回收方法。
此元方法意味着事件标志对象的强引用少了一个, 引用计数 减 1 。
Parameters:
- flgsp userdata (in) 事件标志对象强指针
Usage:
flgsp = nil -- 删除引用 collectgarbage() -- 强制垃圾回收,将调用__gc()函数
- flgsp:metatable.__tostring (flgsp)
-
元方法:__tostring
将事件标志对象强指针格式化成字符串,可用于终端打印调试。
Parameters:
- flgsp userdata (in) 事件标志对象强指针
Usage:
print(flgsp)
Methods
- flgsp:bind (flgsp, sel, pos)
-
绑定事件标志对象到信号选择器
Parameters:
- flgsp userdata (in) 事件标志对象强指针
- sel userdata (in) 信号选择器对象的强指针
- pos number (in) 事件标志对象映射到信号选择器位图中的位置,位置从 0 开始编号
Returns:
-
number
错误码
● 0 没有错误
● -ECHRNG 位置超出范围
● -EALREADY 同步对象已经绑定到事件对象
● -EBUSY 通道已经被其他同步对象独占Usage:
flg = xwos.flg.new(32) -- ...省略... rc = flg:bind(sel, 3) -- 绑定到信号选择器的位置3 if (rc == 0) then -- 绑定成功 else -- 绑定失败 end
- flgsp:unbind (flgsp, sel)
-
从信号选择器上解绑事件标志对象
Parameters:
- flgsp userdata (in) 事件标志对象强指针
- sel userdata (in) 信号选择器对象的强指针
Returns:
-
number
错误码
● 0 没有错误
● -ENOTCONN 同步对象没有绑定到事件对象上Usage:
flg:unbind(sel)
- flgsp:bmp (flgsp)
-
新建位图,位的数量与事件标志中的事件数量相等
Parameters:
- flgsp userdata (in) 事件标志对象强指针
Returns:
-
userdata
位图
Usage:
bmp = flg:bmp()
- flgsp:num (flgsp)
-
获取事件标志中事件(位)的数量
Parameters:
- flgsp userdata (in) 事件标志对象强指针
Returns:
-
number
数量
Usage:
num = flg:num()
- flgsp:read (flgsp)
-
读取事件标志
Parameters:
- flgsp userdata (in) 事件标志对象强指针
Returns:
-
number
错误码
● 0 没有错误 - userdata 事件标志位图
Usage:
rc, bmp = flg:read()
- flgsp:s1m (flgsp, msk)
-
同时设置多个事件标志位
Parameters:
- flgsp userdata (in) 事件标志对象强指针
- msk userdata (in) 事件的位图掩码
Returns:
-
number
错误码
● 0 没有错误Usage:
msk = flg:bmp() msk:zero() msk:s1i(0, 1, 2, 3, 4, 5, 6, 7) -- msk == 0xFF flg:s1m(msk) -- 设置事件1,2,3,4,5,6,7,8
- flgsp:s1i (flgsp, pos)
-
设置单个事件标志位
Parameters:
- flgsp userdata (in) 事件标志对象强指针
- pos number (in) 事件的序号
Returns:
-
number
错误码
● 0 没有错误Usage:
flg:s1i(1) -- 设置事件1
- flgsp:c0m (flgsp, msk)
-
同时清除多个事件标志位
Parameters:
- flgsp userdata (in) 事件标志对象强指针
- msk userdata (in) 事件的位图掩码
Returns:
-
number
错误码
● 0 没有错误Usage:
msk = flg:bmp() msk:zero() msk:s1i(0, 1, 2, 3, 4, 5, 6, 7) -- msk == 0xFF flg:c0m(msk) -- 清除事件1,2,3,4,5,6,7,8
- flgsp:c0i (flgsp, pos)
-
清除单个事件标志位
Parameters:
- flgsp userdata (in) 事件标志对象强指针
- pos number (in) 事件的序号
Returns:
-
number
错误码
● 0 没有错误Usage:
flg:c0i(1) -- 清除事件1
- flgsp:x1m (flgsp, msk)
-
同时翻转多个事件标志位
Parameters:
- flgsp userdata (in) 事件标志对象强指针
- msk userdata (in) 事件的位图掩码
Returns:
-
number
错误码
● 0 没有错误Usage:
msk = flg:bmp() msk:zero() msk:s1i(0, 1, 2, 3, 4, 5, 6, 7) -- msk == 0xFF flg:x1m(msk) -- 翻转事件1,2,3,4,5,6,7,8
- flgsp:x1i (flgsp, pos)
-
翻转单个事件标志位
Parameters:
- flgsp userdata (in) 事件标志对象强指针
- pos number (in) 事件的序号
Returns:
-
number
错误码
● 0 没有错误Usage:
flg:x1i(1) -- 翻转事件1
- flgsp:wait (flgsp, trigger, consumption, origin, msk)
-
等待触发事件
Parameters:
- flgsp userdata (in) 事件标志对象强指针
- trigger
string
(in) 事件触发条件
● "sa" 所有事件位被置 1 触发
● "so" 任意事件位被置 1 触发
● "ca" 所有事件位被清 0 触发
● "co" 任意事件位被清 0 触发
● "ta" 所有事件位发生翻转触发
● "to" 任意事件位发生翻转触发 - consumption
boolean
(in) 是否消费事件
● 消费 事件是指,当线程等到事件被唤醒,可以选择是否 清除 事件标志。
● 清除 的含义是:
○ 当线程等待的是位图中的事件位被置 1 ,清除 是指将这些位清 0 ;
○ 当线程等待的是位图中的事件位被清 0 ,清除 是指将这些位置 1 ;
● 此参数对 trigger 取值 "sa" , "so" , "ca" , "co" 有效;
● 此参数对 trigger 取值 "ta" , "to" ,无意义。 - origin
userdata
(in,out) 事件的状态位图
● 当参数 trigger 取值 "sa" , "so" , "ca" , "co" 时:(out) 返回触发时的事件状态位图
● 当参数 trigger 取值 "ta" , "to" 时:
○ (in) 用于比较的初始值
○ (out) 返回触发时的事件状态位图 - msk userdata (in) 事件的位图掩码,表示只关注掩码部分的事件
Returns:
-
number
返回值
● 0 没有错误
● -EINVAL 参数错误
● -EINTR 等待被中断
● -ENOTTHDCTX 不在线程上下文中Usage:
flg = xwos.flg.new(32) origin = flg:bmp(); msk = flg:bmp(); msk:zero(); msk:s1i(0, 1, 2, 3, 4, 5, 6, 7) -- 事件掩码:0xFF rc = flg:wait("sa", true, origin, msk) if (rc == 0) then -- 获取所有的事件1,2,3,4,5,6,7,8 -- 消费事件,事件1,2,3,4,5,6,7,8会被清除 else -- 错误发生 end
flg = xwos.flg.new(32) origin = flg:bmp(); msk = flg:bmp(); msk:zero(); msk:s1i(0, 1, 2, 3, 4, 5, 6, 7) -- 事件掩码:0xFF rc = flg:wait("so", true, origin, msk) if (rc == 0) then -- 获取事件1,2,3,4,5,6,7,8中的一个或多个 -- 消费事件,事件1,2,3,4,5,6,7,8会被清除 else -- 错误发生 end
flg = xwos.flg.new(32) origin = flg:bmp(); msk = flg:bmp(); msk:zero(); msk:s1i(0, 1, 2, 3, 4, 5, 6, 7) -- 事件掩码:0xFF rc = flg:wait("ca", true, origin, msk) if (rc == 0) then -- 事件1,2,3,4,5,6,7,8全部被清除 -- 消费事件,事件1,2,3,4,5,6,7,8全被设置 else -- 错误发生 end
flg = xwos.flg.new(32) origin = flg:bmp(); msk = flg:bmp(); msk:zero(); msk:s1i(0, 1, 2, 3, 4, 5, 6, 7) -- 事件掩码:0xFF rc = flg:wait("co", true, origin, msk) if (rc == 0) then -- 事件1,2,3,4,5,6,7,8中的一个或多个被清除 -- 消费事件,事件1,2,3,4,5,6,7,8全被设置 else -- 错误发生 end
flg = xwos.flg.new(32) origin = flg:bmp(); origin:zero(); origin:s1i(2, 4, 6, 8); -- 事件初始值:0xAA msk = flg:bmp(); msk:zero(); msk:s1i(0, 1, 2, 3, 4, 5, 6, 7) -- 事件掩码:0xFF rc = flg:wait("ta", true, origin, msk) if (rc == 0) then -- 事件1,2,3,4,5,6,7,8全部发生了翻转 -- consumption对此种类型的等待不起作用 -- origin为翻转后的事件状态(0x55) else -- 错误发生 end
flg = xwos.flg.new(32) origin = flg:bmp(); origin:zero(); origin:s1i(2, 4, 6, 8); -- 事件初始值:0xAA msk = flg:bmp(); msk:zero(); msk:s1i(0, 1, 2, 3, 4, 5, 6, 7) -- 事件掩码:0xFF rc = flg:wait("to", true, origin, msk) if (rc == 0) then -- 事件1,2,3,4,5,6,7,8部分发生了翻转 -- consumption对此种类型的等待不起作用 -- origin为翻转后的事件状态 else -- 错误发生 end
- flgsp:trywait (flgsp, trigger, consumption, origin, msk)
-
检查事件标志
若事件没有触发,立即返回,不会等待。
Parameters:
- flgsp userdata (in) 事件标志对象强指针
- trigger
string
(in) 事件触发条件
● "sa" 所有事件位被置 1 触发
● "so" 任意事件位被置 1 触发
● "ca" 所有事件位被清 0 触发
● "co" 任意事件位被清 0 触发
● "ta" 所有事件位发生翻转触发
● "to" 任意事件位发生翻转触发 - consumption
boolean
(in) 是否消费事件
● 消费 事件是指,当线程等到事件被唤醒,可以选择是否 清除 事件标志。
● 清除 的含义是:
○ 当线程等待的是位图中的事件位被置 1 , 清除 是指将这些位清 0 ;
○ 当线程等待的是位图中的事件位被清 0 , 清除 是指将这些位置 1 ;
● 此参数对 trigger 取值 "sa" , "so" , "ca" , "co" 有效;
● 此参数对 trigger 取值 "ta" , "to" ,无意义。 - origin
userdata
(in,out) 事件的状态位图
● 当参数 trigger 取值 "sa" , "so" , "ca" , "co" 时:(out) 返回触发时的事件状态位图
● 当参数 trigger 取值 "ta" , "to" 时:
○ (in) 用于比较的初始值
○ (out) 返回触发时的事件状态位图 - msk userdata (in) 事件的位图掩码,表示只关注掩码部分的事件
Returns:
-
number
返回值
● 0 没有错误
● -EINVAL 参数错误
● -EINTR 等待被中断
● -ENOTTHDCTX 不在线程上下文中
● -ENODATA 尝试失败Usage:
flg = xwos.flg.new(32) origin = flg:bmp(); msk = flg:bmp(); msk:zero(); msk:s1i(0, 1, 2, 3, 4, 5, 6, 7) -- 事件掩码:0xFF rc = flg:trywait("sa", true, origin, msk) if (rc == 0) then -- 获取所有的事件1,2,3,4,5,6,7,8 -- 消费事件,事件1,2,3,4,5,6,7,8会被清除 else if (rc == -61) -- 检查失败 else -- 错误发生 end
- flgsp:wait_to (flgsp, trigger, consumption, origin, msk, to)
-
限时等待事件标志对象的触发事件
Parameters:
- flgsp userdata (in) 事件标志对象强指针
- trigger
string
(in) 事件触发条件
● "sa" 所有事件位被置 1 触发
● "so" 任意事件位被置 1 触发
● "ca" 所有事件位被清 0 触发
● "co" 任意事件位被清 0 触发
● "ta" 所有事件位发生翻转触发
● "to" 任意事件位发生翻转触发 - consumption
boolean
(in) 是否消费事件
● 消费 事件是指,当线程等到事件被唤醒,可以选择是否 清除 事件标志。
● 清除 的含义是:
○ 当线程等待的是位图中的事件位被置 1 , 清除 是指将这些位清 0 ;
○ 当线程等待的是位图中的事件位被清 0 , 清除 是指将这些位置 1 ;
● 此参数对 trigger 取值 "sa" , "so" , "ca" , "co" 有效;
● 此参数对 trigger 取值 "ta" , "to" ,无意义。 - origin
userdata
(in,out) 事件的状态位图
● 当参数 trigger 取值 "sa" , "so" , "ca" , "co" 时:(out) 返回触发时的事件状态位图
● 当参数 trigger 取值 "ta" , "to" 时:
○ (in) 用于比较的初始值
○ (out) 返回触发时的事件状态位图 - msk userdata (in) 事件的位图掩码,表示只关注掩码部分的事件
- to number (in) 期望的阻塞等待时间
Returns:
-
number
返回值
● 0 没有错误
● -EINVAL 参数错误
● -EINTR 等待被中断
● -ENOTTHDCTX 不在线程上下文中
● -ETIMEDOUT 超时Usage:
flg = xwos.flg.new(32) origin = flg:bmp(); msk = flg:bmp(); msk:zero(); msk:s1i(0, 1, 2, 3, 4, 5, 6, 7) -- 事件掩码:0xFF rc = flg:wait_to("ca", true, origin, msk, xwtm.ft(xwtm.s(1))) if (rc == 0) then -- 事件1,2,3,4,5,6,7,8全部被清除 -- 消费事件,事件1,2,3,4,5,6,7,8全被设置 else if (rc == -116) -- 超时 else -- 错误发生 end