TC官方合作论坛

标题: 多线程存不存在抢资源的问题,如果有该如何解决呢? [打印本页]

作者: ekeen    时间: 2014-9-8 19:41
标题: 多线程存不存在抢资源的问题,如果有该如何解决呢?
比如说我已经完成了一个脚本并生成exe
先单独使用这一个exe的时候是没有问题的,不会报错
但是当我打开2个以上的相同的exe
脚本可能同时去完成一个命令,比如找图比如找字,这个时候就会出现找不到图找不到字的问题
请问该如何解决呢

作者: 贱哥    时间: 2014-9-8 21:20
这个不是多线程 这个是多进程 你是前台脚本还是后台的 如果是后台的那可能是2个程序控制一个窗口 这个时候就容易出现问题了
作者: ekeen    时间: 2014-9-8 21:52
贱哥 发表于 2014-9-8 21:20
这个不是多线程 这个是多进程 你是前台脚本还是后台的 如果是后台的那可能是2个程序控制一个窗口 这个时候 ...

谢谢,我是后台的,一个程序控制一个窗口的
作者: 67800461    时间: 2014-9-8 22:24
本帖最后由 67800461 于 2014-9-8 22:29 编辑

这个问题怎么说呢! 你完全可以在一个EXE里面 做个多线程
最主要的问题 出在了  打个比方你用的是大漠  dm=com("dm.dmsoft")     
第一个EXE里面用了  dm=com("dm.dmsoft")     你打开第二 个其实还是用了  dm=com("dm.dmsoft")    你要 第二换成 dm2=com("dm.dmsoft")  在第二个里面应该就没问题了

这些你全可以放在一个EXE 里面
简单说吧虽然你搞了N个EXE再做 但你只了一个dm 你要是 dm dm2 dm3.........

以前TC3.0版的倒是可以 现在必须这样了

作者: ekeen    时间: 2014-9-8 22:36
67800461 发表于 2014-9-8 22:24
这个问题怎么说呢! 你完全可以在一个EXE里面 做个多线程
最主要的问题 出在了  打个比方你用的是大漠  dm ...

你说的意思我明白了。但是为什么我在一个EXE里面多开还是会出现问题。
比如说:我绑定了第一个窗口,然后再绑定第2个窗口,开启与第一个窗口相同的命令,结果就像是错乱了似得。
我用的是天使,能否给我举个简单点的多开例子呢?
我初始化注册插件成功,绑定里面也设置了资源,创建了对象,理论上来说,好像是没有问题
作者: 67800461    时间: 2014-9-8 22:43
简单的说吧
创建对象的时候 ts1=    ts2 =            绑定的时候 ts1.去绑定第一个窗口 后面的全是ts1.带头              第二个用ts2.去绑定窗口 后面的编码全是ts2带头  这样就可以达到双开了

还不懂 就上点代码帮你改改
作者: ekeen    时间: 2014-9-9 20:34
67800461 发表于 2014-9-8 22:43
简单的说吧
创建对象的时候 ts1=    ts2 =            绑定的时候 ts1.去绑定第一个窗口 后面的全是ts1.带 ...

空间 蓝叶东方
变量 窗口句柄,ts,intX,intY,皇榜X,皇榜Y,继续X,继续Y,点将军X,点将军Y,药名,需要的数量,任务
变量 线程皇榜,线程师门,线程帮派,线程试炼,线程检测
ts = com("ts.tssoft")
功能 初始化()
    help.sleep(300)
    蓝叶东方.注册天使()
    help.sleep(300)
    蓝叶东方.解决残留垃圾()
功能结束
功能 师门_点击()
    任务="师门任务"
    help.sleep(200)
    ts.MoveTo(532,698)
    help.sleep(50)
    ts.LeftClick()//解决第一次鼠标点击无效的问题
    线程师门=线程.开启("蓝叶东方.做师门","")
    help.sleep(200)
    线程.关闭(线程皇榜)
    help.sleep(200)
    线程.关闭(线程帮派)
    help.sleep(200)
    线程.关闭(线程试炼)
功能结束

//这中间都是具体代码了

功能 绑定窗口_点击()
    绑定对象名=编辑框.获得文本("填写游戏角色名")
    窗口句柄 = ts.FindWindow("",绑定对象名) //zmyth.l2d.Frame
    ts.SetPath(辅助.获取资源路径("rc:"))
    ts_ret = ts.SetDict(0,"东方颂.txt")   
    ts_ret = ts.SetWindowState(窗口句柄,12)//恢复激活窗口
    help.sleep(500)
    ts.MoveWindow(窗口句柄,-10,-10)
    help.sleep(2500)
    ts_ret = ts.BindWindow(窗口句柄,"dx2","dx","dx",1) //
    如果(ts_ret!=1)
        help.messagebox("窗口绑定失败,错误码:"&ts.GetLastError())
        help.exit()
    否则
        ts.DownCpu(50)
        ts.LockInput(0)
        编辑框.设置文本("调试用",绑定对象名&"的窗口绑定成功\r\n"&编辑框.获得文本("调试用"))  
    如果结束
功能结束

功能 注册天使()
    help.sleep(300)
    if(help.isregister("ts.tssoft"))
        //调试输出("天使已经降临")
        编辑框.设置文本("调试用","天使已经降临\r\n")   
    else
        调试输出("开始注册插件")
        是否成功=辅助.注册插件("rc:\\TSPlug.dll",真)
        如果(是否成功)
            调试输出("插件注册成功")
        否则
            help.messagebox("天使未注册成功")
        如果结束
    endif
功能结束

功能 退出_点击()
    ts.UnBindWindow()
    辅助.等待(50)
    辅助.退出()
功能结束
空间结束

大体上就是这样的,我实际上想要实现的功能就是:鼠标指向窗口按下某键就开启一个线材,达到多开的目的
作者: 67800461    时间: 2014-9-9 22:10
TC结合天使插件多对象多开示例  

TC编码工具右上角里面有个现成的多开示例!!里面有源码 很详细
作者: ekeen    时间: 2014-9-9 23:58
67800461 发表于 2014-9-9 22:10
TC结合天使插件多对象多开示例  

TC编码工具右上角里面有个现成的多开示例!!里面有源码 很详细  ...

刚看了下,太详细了。有点绕。我这个没有子窗口的,能否修改一下呢,就把那个事例修改一下就好
作者: sunlizhu    时间: 2014-9-10 21:27

bbs中的附件我都下载不到呢




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