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

软件版本: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

快捷导航

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

发新话题 回复该主题

[问题] 求教:多线程调用子程序结束后,全局变量的值被清空的问题。 [复制链接]

1#
有没有人碰到跟我一样的问题。
主程序里只通过多线程调用了一个子程序,循环执行直到找不到目标为止。

然而,当这个被多线程调用的子程序正常结束后,会把之前定义的全局变量(GLOBAL)的值全部清空,这不符合逻辑啊!!!

其他的子程序、函数,点击事件都是正常使用的。

2#

补充测试代码如下:

Global SLV
Global RobQuestionStatus

// 软件界面加载
Event Wind.Load
SLV = 1
End Event

Sub PrintGlobal(pos)
TracePrint "> " & pos & ",打印全局变量:"
TracePrint "> SLV: " & SLV
TracePrint "> RobQuestionStatus: " & RobQuestionStatus
End Sub

// 自动抢答(使用线程调用)
Sub AutoRobQuestionS()

RobQuestionStatus = 1// 自动抢答的标记

Call PrintGlobal("在抢答中")

Do // 循环点击【抢答】按钮
If RobQuestionStatus = 0 Then // 停止自动抢答
Exit Do
End If

rob = 0
If rob = 0 Then // 如果找不到【抢答】按钮,则退出抢题

TracePrint "> 抢答成功!"
Exit Do

Else // 自动点击【抢答】按钮

TracePrint "> 点击屏幕按钮"

End If
Loop
End Sub

// 抢答
Event Wind.Button1.Click
Call PrintGlobal("在抢答前")

//AutoRobQuestionThread =
BeginThread AutoRobQuestionS // 启动自动抢答线程
End Event

// 打印全局变量
Event Wind.Button2.Click
Call PrintGlobal("在抢答后")
End Event

3#

补充运行截图:

4#

经各位QQ群大佬的帮助,此问题通过把Global改为DimEnv(环境变量)解决了。

但这个问题不知是否为BUG,主要还是为什么在SUB结果后,会把之前定义好的全局变量的值清空掉。。。

发新话题 回复该主题