TC官方合作论坛

标题: TC多线程的一个BUG,会导致大漠后台失效. [打印本页]

作者: q1726    时间: 2016-12-16 02:57
标题: TC多线程的一个BUG,会导致大漠后台失效.

在写脚本的过程中发现的,临时写了一下测试一下应该是BUG

在函数1线程里再启动函数2线程会导致大漠失效,自己是已绑定的状态,,如果在 函数1 里下面加个延时或者循环 这样函数2找图又可以找到了,如果不加只能找到第一次.

大概的意思是,函数1线程没执行完毕的时候函数2一直是有效的,一旦函数1这个线程执行完毕,在函数1里开启的函数2线程就会失效.

我在写辅助的时候发现的问题,自己本地做了个小测试果然是这样.

不是数组的问题,及时把每个线程加上ID定义成数组也是会有这个情况的,是我没解决好还是无法解决的 谢谢.

作者: q1726    时间: 2016-12-16 02:58
大漠提示是已绑定,因为是多开我定义的数组追加什么调试输出也没有问题.  感觉应该是个BUG
作者: adamyun    时间: 2016-12-16 06:55
好像是这样的:每个窗口都要一个大漠对象。
作者: q1726    时间: 2016-12-16 09:35
adamyun 发表于 2016-12-16 06:55
好像是这样的:每个窗口都要一个大漠对象。

恩,这个我知道的. 跟那没关系的
作者: 地狱骑士    时间: 2016-12-16 09:53
楼主用的win10 ?这个问题我也遇到
作者: milai5201    时间: 2016-12-16 10:12
不是线程BUG,你把这个函数  库_找图 发出来看看?
如果把这个函数改成 dm.findpic还会出错吗?
作者: dear    时间: 2016-12-16 10:28
从你截图的源码看,看不到DM初始化的地方。。虽然是全局变量,但是得看你是怎么初始化大漠对象的。

作者: q1726    时间: 2016-12-16 10:38
dear 发表于 2016-12-16 10:28
从你截图的源码看,看不到DM初始化的地方。。虽然是全局变量,但是得看你是怎么初始化大漠对象的。
...

你好活跃啊总能看见你....
初始化没问题,我临时写的测试就是单开的,测试很多次了好像确实是BUG.

我临时测试初始化写的是   注册  dm=com("dm.dmsoft") 然后注册收费  就几行命令

多开的话是把 数组[句柄]=com("dm.dmsoft") 大概这样子
作者: dear    时间: 2016-12-16 10:53
q1726 发表于 2016-12-16 10:38
你好活跃啊总能看见你....
初始化没问题,我临时写的测试就是单开的,测试很多次了好像确实是BUG.

我都很少回复的。。
你测试下是不是出了创建对象的函数后,对象就不存在了。。如果是这个问题的话,这个不是个BUG。
作者: q1726    时间: 2016-12-16 10:59
dear 发表于 2016-12-16 10:53
我都很少回复的。。
你测试下是不是出了创建对象的函数后,对象就不存在了。。如果是这个问题的 ...

对象存在的.... 下标 句柄 数组都没问题~~ 我也写过一些脚本都没问题 也是头一次碰见这个情况 研究好久 才觉得是BUG
作者: dear    时间: 2016-12-16 11:20
q1726 发表于 2016-12-16 10:59
对象存在的.... 下标 句柄 数组都没问题~~ 我也写过一些脚本都没问题 也是头一次碰见这个情况 研究好久  ...

TC版本多少的?
最好是下断点调试。
多线程会导致大漠后台失效这个目前没遇到过。
但是使用多线程 变量作用域这个问题 很常见。尤其是5.x之后版本。
作者: q1726    时间: 2016-12-16 11:32
dear 发表于 2016-12-16 11:20
TC版本多少的?
最好是下断点调试。
多线程会导致大漠后台失效这个目前没遇到过。

用的6.2版本,找图找色一旦第一个线程结束后就变成了-1了...也是蛋疼 脚本都写完了不好再换
作者: q1726    时间: 2016-12-16 11:32
dear 发表于 2016-12-16 11:20
TC版本多少的?
最好是下断点调试。
多线程会导致大漠后台失效这个目前没遇到过。

最后调试临时加了一条命令才发现这个BUG的 头疼啊
作者: q1726    时间: 2016-12-16 14:13
dear 发表于 2016-12-16 11:20
TC版本多少的?
最好是下断点调试。
多线程会导致大漠后台失效这个目前没遇到过。

终于解决了,确实是BUG.
作者: 312120292    时间: 2016-12-16 16:36
我观测,你函数1把 线程二 开启之后,,这个函数就执行结束了,,,然后大漠就知道解绑了, 也就是说,,,在开启线程二这句代码刚执行完毕,,但是实际上这个线程还没开出来,这个时间段,大漠解绑了!
所以,你的线程二 里面的大漠 就无效了,,说不准还会报错吧!

如果是在开启线程二后面加点延迟,让线程二真正的启动成后,,估计就可以了!

新手一枚,以上纯属个人观点,,,,老鸟勿喷!
作者: q1726    时间: 2016-12-16 19:08
312120292 发表于 2016-12-16 16:36
我观测,你函数1把 线程二 开启之后,,这个函数就执行结束了,,,然后大漠就知道解绑了, 也就是说,,, ...

正常来说线程不会影响线程的,A线程停止了,B线程也不会结束的.
测试了好几个小时发现确实是BUG,作用域5.0之后有时候确实有时候会有问题.
B线程在执行中除了找图找色有问题其它都没问题,我本来要载入一些数组的,后来换了下用,用线程开函数然后在函数里再绑定就解决了,代码没改就是简单移动下了位置,刚才闲着无聊又测试了几组都是这样......尴尬额
作者: dear    时间: 2016-12-16 22:56
q1726 发表于 2016-12-16 14:13
终于解决了,确实是BUG.

你发个这个问题的demo。
我看一下吧。
5.0以上版本对于插件变量的作用域要求严格很多。
作者: q1726    时间: 2016-12-17 01:00
dear 发表于 2016-12-16 22:56
你发个这个问题的demo。
我看一下吧。
5.0以上版本对于插件变量的作用域要求严格很多。 ...

就是我写的那个样子的.
作者: luoliang0    时间: 2017-1-5 16:48
多看看大漠多线程注意事项'
作者: 无啦啦    时间: 2017-1-21 00:04
什么数组句柄句柄
作者: 无啦啦    时间: 2017-1-21 00:05
代码有问题
作者: winbei2010    时间: 2018-6-20 18:39
创建大漠对象的那个线程要一直存在,不能释放。
就这样





欢迎光临 TC官方合作论坛 (http://bbs.52tc.co/) Powered by Discuz! X3.1