- 按键认证导师
- 513852
- 3624
- 47
- 4633 朵
- 28052 个
- 6157 个
- 190000
- 2010-10-09
|
1#
t
T
发表于 2022-02-08 11:24
|
|只看楼主
最新版按键精灵2014已支持数组全局变量了,也就意味着以后多线程不需要再借助插件或字符串来传递数组内容了,不过静态数组与动态数组的用法还是稍微不同,具体例子如下: - Global 静态数组(2), 动态数组
- 静态数组(0) = "紫猫"
- 静态数组(1) = "老师"
- 静态数组(2) = "好帅"
- 动态数组 = Array("紫猫", "编程", "学院")
- //注意, 启动多线程的参数是没有括号的, 也就是不能填写BeginThread(多线程())!
- TID = BeginThread(多线程)
- //等待多线程执行修改数组内容
- Delay 1000
- //主线程中静态数组也可以直接使用, 并且获取到修改后的值!!!
- TracePrint "被修改后的静态数组: " & 静态数组(0) & " " & 静态数组(1) & " " & 静态数组(2)
- //但是定义全局变量的动态数组无法直接输出, 会报错!!!
- TracePrint "主线程的动态数组内容如下: " & 动态数组(0) & " " & 动态数组(1) & " " & 动态数组(2)
- //必须要通过赋值给一个变量, 再使用这个变量来输出动态数组内容!!!
- Dim 数组
- 数组 = 动态数组
- TracePrint "被修改后的动态数组: " & 数组(0) & " " & 数组(1) & " " & 数组(2)
- Sub 多线程()
- TracePrint "启动多线程..."
-
- //下面的静态数组可以直接传递输出不会报错
- TracePrint "静态数组内容如下: " & 静态数组(0) & " " & 静态数组(1) & " " & 静态数组(2)
- //修改后的值也可以直接传递, 见主线程里的输出
- 静态数组(0) = "修改静态数组"
-
- //下面的动态数组如果直接传递会报错的!!!
- TracePrint "原动态数组内容如下: " & 动态数组(0) & " " & 动态数组(1) & " " & 动态数组(2)
-
- //必须要通过赋值给一个变量, 再使用这个变量来输出动态数组内容!!!
- Dim Arr
- Arr = 动态数组
- TracePrint "Arr数组内容如下: " & Arr(0) & " " & Arr(1) & " " & Arr(2)
- //如果修改了这个动态数组后想更新到全局变量中, 则必须重新赋值给全局动态数组变量, 否则无法更新全局变量值
- Arr(0) = "修改动态数组"
- 动态数组 = Arr
-
- //而且神奇的是静态数组的数据类型是Empty, 动态数组的数据类型是Variant()
- TracePrint VarType(静态数组)
- TracePrint VarType(动态数组)
- End Sub
复制代码
由于动态数组在多线程中取值与赋值不方便, 特别是赋值还容易造成线程冲突, 故不是特别推荐使用, 如果一定要用的话, 可以考虑使用下面例子中的getDynArr()和setDynArr()两个函数来实现。 - Global 动态数组
- 动态数组 = Array("紫猫", "编程", "学院")
- TracePrint "主线程, 数组全部内容:" & join(动态数组, ", ")
- TracePrint "主线程, 修改前: " & getDynArr(动态数组, 1)
- 动态数组 = setDynArr(动态数组, 1, "老师")
- TracePrint "主线程, 修改后: " & getDynArr(动态数组, 1)
- BeginThread 多线程
- Delay 1000
- TracePrint "主线程, 线程修改后数组全部内容: " & join(动态数组, ", ")
- /**********
- * 函数 getDynArr
- * 功能 获取全局动态数组或环境动态数组的元素值
- * 原型 元素值 = getDynArr(动态数组, 下标)
- * 参数 动态数组, 数组型, 动态数组变量
- * 参数 下标, 整数型, 动态数组下标
- * 返回 动态数组的元素值
- **********/
- Function getDynArr(动态数组, 下标)
- getDynArr = 动态数组(下标)
- End Function
- /**********
- * 函数 setDynArr
- * 功能 修改全局动态数组或环境动态数组的元素值
- * 原型 动态数组 = setDynArr(动态数组, 下标, 内容)
- * 参数 动态数组, 数组型, 动态数组变量
- * 参数 下标, 整数型, 动态数组下标
- * 参数 内容, 任意类型, 新的内容
- * 返回 新的动态数组
- **********/
- Function setDynArr(动态数组, 下标, 内容)
- 动态数组(下标) = 内容
- setDynArr = 动态数组
- End Function
- Sub 多线程()
- TracePrint "多线程, 数组全部内容:" & join(动态数组, ", ")
-
- TracePrint "多线程, 修改前: " & getDynArr(动态数组, 2)
- 动态数组 = setDynArr(动态数组, 2, "真帅")
- TracePrint "多线程, 修改后: " & getDynArr(动态数组, 2)
- End Sub
复制代码 总结:
- 在全局变量或环境变量中,静态数组比动态数组更加使用方便。
- 静态数组不需要做任何特殊处理,以前怎么用,多线程里就怎么用。
- 要获取全局或环境变量的动态数组,必须要通过赋值给另一个变量后,使用该变量取值。
- 如果要更新全局或环境变量的动态数组,则必须要对动态数组重新赋值。
- 多线程中使用全局变量或环境变量时,要避免同时对同一个数据进行同时修改或同时修改并读取,否则容易出现崩溃。
|