• 按键公众号 :
按键精灵电脑版
立即下载

软件版本:2014.06
软件大小:22.9M
更新时间:2021-12-03

按键精灵安卓版
立即下载

软件版本:3.7.2
软件大小:46.2M
更新时间:2023-05-10

按键精灵iOS版
立即下载

软件版本:1.8.0
软件大小:29.2M
更新时间:2023-03-21

按键手机助手
立即下载

软件版本:3.8.0
软件大小:262M
更新时间:2023-05-30

快捷导航

登录 后使用快捷导航
没有帐号? 注册

发新话题 回复该主题

[紫猫] [电脑版]按键精灵2014全局数组变量传递(支持静态与动态) [复制链接]

1#

最新版按键精灵2014已支持数组全局变量了,也就意味着以后多线程不需要再借助插件或字符串来传递数组内容了,不过静态数组与动态数组的用法还是稍微不同,具体例子如下:

  1. Global 静态数组(2), 动态数组
  2. 静态数组(0) = "紫猫"
  3. 静态数组(1) = "老师"
  4. 静态数组(2) = "好帅"

  5. 动态数组 = Array("紫猫", "编程", "学院")

  6. //注意, 启动多线程的参数是没有括号的, 也就是不能填写BeginThread(多线程())!
  7. TID = BeginThread(多线程)

  8. //等待多线程执行修改数组内容
  9. Delay 1000

  10. //主线程中静态数组也可以直接使用, 并且获取到修改后的值!!!
  11. TracePrint "被修改后的静态数组: " & 静态数组(0) & " " & 静态数组(1) & " " & 静态数组(2)

  12. //但是定义全局变量的动态数组无法直接输出, 会报错!!!
  13. TracePrint "主线程的动态数组内容如下: " & 动态数组(0) & " " & 动态数组(1) & " " & 动态数组(2)
  14. //必须要通过赋值给一个变量, 再使用这个变量来输出动态数组内容!!!
  15. Dim 数组
  16. 数组 = 动态数组
  17. TracePrint "被修改后的动态数组: " & 数组(0) & " " & 数组(1) & " " & 数组(2)

  18. Sub 多线程()
  19. TracePrint "启动多线程..."

  20. //下面的静态数组可以直接传递输出不会报错
  21. TracePrint "静态数组内容如下: " & 静态数组(0) & " " & 静态数组(1) & " " & 静态数组(2)
  22. //修改后的值也可以直接传递, 见主线程里的输出
  23. 静态数组(0) = "修改静态数组"

  24. //下面的动态数组如果直接传递会报错的!!!
  25. TracePrint "原动态数组内容如下: " & 动态数组(0) & " " & 动态数组(1) & " " & 动态数组(2)

  26. //必须要通过赋值给一个变量, 再使用这个变量来输出动态数组内容!!!
  27. Dim Arr
  28. Arr = 动态数组
  29. TracePrint "Arr数组内容如下: " & Arr(0) & " " & Arr(1) & " " & Arr(2)
  30. //如果修改了这个动态数组后想更新到全局变量中, 则必须重新赋值给全局动态数组变量, 否则无法更新全局变量值
  31. Arr(0) = "修改动态数组"
  32. 动态数组 = Arr

  33. //而且神奇的是静态数组的数据类型是Empty, 动态数组的数据类型是Variant()
  34. TracePrint VarType(静态数组)
  35. TracePrint VarType(动态数组)
  36. End Sub
复制代码


由于动态数组在多线程中取值与赋值不方便, 特别是赋值还容易造成线程冲突, 故不是特别推荐使用, 如果一定要用的话, 可以考虑使用下面例子中的getDynArr()和setDynArr()两个函数来实现。

  1. Global 动态数组
  2. 动态数组 = Array("紫猫", "编程", "学院")
  3. TracePrint "主线程, 数组全部内容:" & join(动态数组, ", ")

  4. TracePrint "主线程, 修改前: " & getDynArr(动态数组, 1)
  5. 动态数组 = setDynArr(动态数组, 1, "老师")
  6. TracePrint "主线程, 修改后: " & getDynArr(动态数组, 1)

  7. BeginThread 多线程
  8. Delay 1000

  9. TracePrint "主线程, 线程修改后数组全部内容: " & join(动态数组, ", ")

  10. /**********
  11. * 函数 getDynArr
  12. * 功能 获取全局动态数组或环境动态数组的元素值
  13. * 原型 元素值 = getDynArr(动态数组, 下标)
  14. * 参数 动态数组, 数组型, 动态数组变量
  15. * 参数 下标, 整数型, 动态数组下标
  16. * 返回 动态数组的元素值
  17. **********/
  18. Function getDynArr(动态数组, 下标)
  19. getDynArr = 动态数组(下标)
  20. End Function

  21. /**********
  22. * 函数 setDynArr
  23. * 功能 修改全局动态数组或环境动态数组的元素值
  24. * 原型 动态数组 = setDynArr(动态数组, 下标, 内容)
  25. * 参数 动态数组, 数组型, 动态数组变量
  26. * 参数 下标, 整数型, 动态数组下标
  27. * 参数 内容, 任意类型, 新的内容
  28. * 返回 新的动态数组
  29. **********/
  30. Function setDynArr(动态数组, 下标, 内容)
  31. 动态数组(下标) = 内容
  32. setDynArr = 动态数组
  33. End Function

  34. Sub 多线程()
  35. TracePrint "多线程, 数组全部内容:" & join(动态数组, ", ")

  36. TracePrint "多线程, 修改前: " & getDynArr(动态数组, 2)
  37. 动态数组 = setDynArr(动态数组, 2, "真帅")
  38. TracePrint "多线程, 修改后: " & getDynArr(动态数组, 2)
  39. End Sub
复制代码
总结:

  • 在全局变量或环境变量中,静态数组比动态数组更加使用方便。
  • 静态数组不需要做任何特殊处理,以前怎么用,多线程里就怎么用。
  • 要获取全局或环境变量的动态数组,必须要通过赋值给另一个变量后,使用该变量取值。
  • 如果要更新全局或环境变量的动态数组,则必须要对动态数组重新赋值。
  • 多线程中使用全局变量或环境变量时,要避免同时对同一个数据进行同时修改或同时修改并读取,否则容易出现崩溃。


【紫猫编程学院】火热招生中

教学涉及按键精灵(电脑版与手机版)、网页、游戏、办公、插件等。

报名咨询QQ: 345911220 微信:zimaoxy

紫猫学院免费教程

加入交流QQ群: 7333555


2#

收藏看看

3#

学习一下

4#

  1. Global 静态数组(2)
  2. Event Form1.Button1.Click
  3. 测=BeginThread(主程序)
  4. End Event
  5. Sub 主程序
  6. 静态数组(1) = "老师"
  7. TracePrint 静态数组(1)
  8. Delay 1000
  9. 等=BeginThread(测试)
  10. End Sub
  11. Sub 测试()
  12. TracePrint 静态数组(1)
  13. End Sub
复制代码
这个运行不报错
但是把"静态数组"四个字改成任意其他的,全部报错,比如
  1. Global 一个数组(2)
  2. Event Form1.Button1.Click
  3. 测=BeginThread(主程序)
  4. End Event
  5. Sub 主程序
  6. 一个数组(1) = "老师"
  7. TracePrint 一个数组(1)
  8. Delay 1000
  9. 等=BeginThread(测试)
  10. End Sub
  11. Sub 测试()
  12. TracePrint 一个数组(1)
  13. End Sub
复制代码

发新话题 回复该主题