aardio 文档

thread.table 库模块帮助文档

用法说明

线程共享表用于读写多线程共享值,以简化 thread.get,thread.set 的操作。 线程共享表本质上只是线程共享数据代理对象,自身并不存储这些线程共享数据。

线程共享表(thread.table )基本规则:

使用 thread.table 的示例 aardio 代码:


//注意先导入 thread.table 库再创建 thread.table 对象。
var thrdTable = thread.table()

//用下标读写键值,键名与对象的属性、函数名同名不会冲突。
thrdTable["b"] = 34; 
thrdTable["c"]= 56; 

//可以读写普通表,但子表并不是线程共享表。
thrdTable["d"] = {}; 

//每次读取 thrdTable.d 都会得到新的副本
var localData = thrdTable["d"];

//修改 localData 不会自动会同步到线程共享资源。
localData.tab = { name = "name" }

//下面这样只是修改子表的临时副本,子表不是线程共享表
thrdTable.d.tab = { name = "name" }

//只有修改线程共享表的直接成员,才会自动同步到线程共享资源
thrdTable["d"] = localData;

//注意 # 操作符不适合用于线程共享表
var len = #thrdTable

//应当用 len 函数或 length 属性获取共享数组长度
len = thrdTable.len(); // 也可以用 thrdTable.

//线程共享表可作为线程函数的参数直接传入其他线程函数。
thread.invoke( 
    function(tab){
        var localData = thrdTable["d"]; 
    },thrdTable
)

thread 成员列表

thread.table()

创建多线程共享表,返回对象可作为参数传入其他线程函数。
可选使用参数 @1 指定线程共享变量名,
省略参数 @1 则自动分配线程共享变量名。

thread.var 以及 thread.table 分配的线程共享变量名上限为
:0x3FFFFFFFFFFFFC0000000000000 个。
应及时调用线程共享表的 release 函数释放对象与空闲的共享变量名

可选用参数 @2 指定是否要重新初始化并创建新的共享表。
如果未指定共享表名称,则总是重新初始化共享表

返回对象:threadTableObject

thread.table 成员列表

多线程共享表。
这是标准库模块,需要导入才能用。
线程共享表用于读写多线程共享值,以简化 thread.get,thread.set 的操作。
注意线程共享表本质上只是线程共享数据代理对象,自身并不存储这些线程共享数据。
- 每次读取共享表的成员都会在当前线程复制一个新的副本。
- 写入直接表的直接成员才会写入线程共享资源。
- 不要将普通表直接覆盖替换线程共享表自身,应当存为子表
- 线程共享表的子表并非也是共享表,修改子表的成员并不能更新父级线程共享表。
- 线程共享表的下标操作符被重载为读写共享资源,不会与共享表的同名方法、属性发生冲突。
- 线程共享表的成员操作符虽然也能读写共享资源,但要避免覆盖同名的共享表方法与属性。
- 获取共享数组长度应当用线程共享表对象的 len 函数而不是 # 操作符。

thread.table.array()

创建多线程共享数组,返回对象可作为参数传入其他线程函数。
可选使用参数 @1 指定线程共享变量名,
省略参数 @1 则自动分配线程共享变量名。

thread.var 以及 thread.table 分配的线程共享变量名上限为
:0x3FFFFFFFFFFFFC0000000000000 个。
应及时调用线程共享表的 release 函数释放对象与空闲的共享变量名

可选用参数 @2 指定是否要重新初始化并创建新的共享表。
如果未指定共享表名称,则总是重新初始化共享表

返回对象:threadTableObject

threadTableObject 成员列表

threadTableObject.?

使用索引下标 [] 可读写共享表全部键值。
使用成员属性操作符 . 则先访问对象的函数成员。

不要拿普通表直接覆盖线程共享表本身,应存为共享表里的成员表。

因为每次读取共享表的成员都会在当前线程复制一个新的副本。
所以要修改线程共享表里面的子表,必须先读取到当前线程的本地变量。

threadTableObject.add(字段名,数值)

修改共享表中参数@1指定名字的字段值。
旧的字段值必须为 null 或数值。
如果旧值为 null 则直接赋值为参数@2。
如果旧值为数值则增加参数@2指定的数值。

threadTableObject.append()

追加一个或多个数组到线程共享表,
此函数内部使用table.append实现,规则相同,
但无返回值

threadTableObject.clear()

清空共享表中的所有值

threadTableObject.concat( tab2 )

拼接多个table对象

threadTableObject.count()

获取table成员总数

threadTableObject.each

for k,v in threadTableObject.each() {
    /*遍历表对象,k 为当前键,v 为当前值*/
}

threadTableObject.get("键名")

读取成员值

threadTableObject.getByNamespace("字符串参数")

在指定表查找并返回成员

threadTableObject.insert(要插入的值 )

插入元素到table头部

threadTableObject.insert(要插入的值,要插入的位置 )

插入元素到指定位置

threadTableObject.left(len)

返回table对象左侧开始返回指定个数的元素。

threadTableObject.len()

返回 table 对象的数组元素长度,不含数组成员则返回 0。
length 属性也可以返回数组长度,但表不是数组类型时返回 null。

# 操作符仅用于计算表对象自身存储的数组成员,
但线程共享仅仅是共享表的代理表,并不存储真正的共享数据。

threadTableObject.lenByNamespace("字符串参数")

返回指定元素长度

threadTableObject.length

数组返回数组长度,表不含数组成员且不是数组类型时返回 null。
可使用 thread.table.array 创建数组类型的线程共享表。

# 操作符仅用于计算表对象自身存储的数组成员,
但线程共享仅仅是共享表的代理表,并不存储真正的共享数据。

threadTableObject.name

共享表名字,不要改动

threadTableObject.next( key )

迭代获取table的下一个键值对元素

threadTableObject.next()

获取table的第一个键值对元素

threadTableObject.pop()

在顺序数组尾部弹出一个或多个元素并作为返回值

threadTableObject.push()

在顺序数组尾部压入一个或多个元素,返回数组大小

threadTableObject.push(v1,v2,v3,...)

在顺序数组尾部压入多个元素,返回数组大小

threadTableObject.range()

返回table数组的最小索引,最大索引
min,max=tab.range();

threadTableObject.release()

释放线程共享表,释放后不应当再使用

threadTableObject.remove( )

在table头部移除元素

threadTableObject.remove(位置 )

在表中指定位置移除元素

threadTableObject.reverse()

table数组倒序排列。

threadTableObject.right(len

返回table对象右侧开始返回指定个数的元素

threadTableObject.set("键名",值)

写入成员值

threadTableObject.setByNamespace("字符串参数",新值)

参数一指定表内名字空间路径,如果不存在则则创建此表内名字空间,
支持索引操作符,可以使用[]空索引实现在数组尾部添加值
参数二指定需要设置的值,如果不指定则创建空表并赋值

threadTableObject.shift(移除数目)

自数组头部移除并返回指定个数成员,
参数默认为1

threadTableObject.sort( )

排序

threadTableObject.sort( comProc )

排序,comProc指定用于比较元素大小的函数

threadTableObject.tostring()

获取table的字符串表达式

threadTableObject.unpack()

返回表中所有的元素
a,b,c,d,e = tab.unpack();

threadTableObject.unshift(要插入的一个或多个元素)

插入一个或多个元素到数组头部,返回数组长度

Markdown 格式