TC官方合作论坛

 找回密码
 立即注册
查看: 2667|回复: 9

[已解决] 线程多开时遇到全局变量问题几乎无解

[复制链接]
发表于 2019-12-16 19:53:37 | 显示全部楼层 |阅读模式

马上加入TC

您需要 登录 才可以下载或查看,没有帐号?立即注册

x

启用线程多开,想必大家应该都知道。

以下为两个多开例子的逻辑流程:

全局变量用于表示可以跑路:a
多开线程1:
      打怪线程()
      捡物线程()
      跑路线程()

多开线程2:
      打怪线程()
      捡物线程()
      跑路线程()

////////////////////////////
问题来了,多开线程 1 的捡物线程 通知跑路线程(a=true):“现在可以跑路了” ,多开线程2中此时不需要跑路,但全局变量(a==true) 导致多开线程2也跑路了。
///////////////////

我尝试过这样解决:
用全局多维数组,每个数组用线程ID作为key  ,但是多开线程1中存有多个子线程,线程ID各不一样,自然就没法共用一个数组.
也许你会问,可以传递参数给子线程实现共用一个全局数组,但是,线程参数已经用来传递大漠插件了。 因为大漠插件是必须在一个多开**用。


回复

使用道具 举报

发表于 2019-12-16 22:00:12 | 显示全部楼层
perock 发表于 2019-12-16 20:20
其实最大的问题是,TC的数组无法传递,
var a = array("1","abc")
var b = a

我完全理解不了你为什么说, 啥都不是................
怎么就无法传递???

  1. var a = array("1","abc")
  2.         var b = a
  3.         调试输出(获取变量类型(b))
  4.     调试输出(b[0])
  5.         调试输出(b[1])
复制代码


请自己调试这段
回复 支持 反对

使用道具 举报

 楼主| 发表于 2019-12-16 20:20:16 | 显示全部楼层
其实最大的问题是,TC的数组无法传递,
var a = array("1","abc")
var b = a

b仍然是个啥都不是
回复 支持 反对

使用道具 举报

 楼主| 发表于 2019-12-16 20:55:30 | 显示全部楼层
自己解决,使用getvarpointer
回复 支持 反对

使用道具 举报

发表于 2019-12-16 21:44:00 | 显示全部楼层
getvarpointer
怎么解决
回复 支持 反对

使用道具 举报

 楼主| 发表于 2019-12-16 22:18:42 | 显示全部楼层
2576605471 发表于 2019-12-16 22:00
我完全理解不了你为什么说, 啥都不是................
怎么就无法传递???

十分尴尬是我失误,把("a","123") 的a当成了key
回复 支持 反对

使用道具 举报

 楼主| 发表于 2019-12-16 22:21:59 | 显示全部楼层
cjxdn 发表于 2019-12-16 21:44
getvarpointer
怎么解决

用窗口句配做为数组的key,那么每个多开肯定是同一个句柄,自然每个多开下都是操作同一份数组了,而大漠插件自绑定后就一直记录了当时的窗口句柄。每个多开的子线程中使用此句柄从数组中获取变量,就达到了所有多开之间完全隔离的目的。
回复 支持 反对

使用道具 举报

发表于 2019-12-18 15:50:34 | 显示全部楼层
打怪,捡物,跑路不是串行执行么,直接调用三个函数,就不用考虑线程之间的状态通知了。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2019-12-19 08:26:11 | 显示全部楼层
老方丈 发表于 2019-12-18 15:50
打怪,捡物,跑路不是串行执行么,直接调用三个函数,就不用考虑线程之间的状态通知了。 ...

用多线程主要目的是提高效率,因为全在一个串中单独一次循环将花费数秒
回复 支持 反对

使用道具 举报

发表于 2019-12-19 16:59:56 | 显示全部楼层
也可以定义一个全局变量来表示窗口的ID,多开一次,累加一下,每个线程启动的时候,检测自己是哪个窗口(=窗口ID),这样就获取了每个多开不一样的特征,然后和别的变量关联起来。这个方法和你的窗口句柄类似。
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关闭

推荐上一条 /2 下一条

关闭

小黑屋|TC官方合作论坛 (苏ICP备18045623号)

GMT+8, 2024-5-19 06:27 , Processed in 0.060164 second(s), 23 queries .

Powered by 海安简单软件服务部

© 2008-2019 版权所有 保留所有权利

快速回复 返回顶部 返回列表