TC官方合作论坛

 找回密码
 立即注册
查看: 917|回复: 3
打印 上一主题 下一主题

[讨论] 哎弄了几天才把临界区前台多开弄的一知半解!!

[复制链接]
跳转到指定楼层
楼主
发表于 2014-5-8 00:09:38 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

马上加入TC

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

x
空间 TC多开测试
//默认空间
线程句柄
对象句柄
a=110
b=220
Ts=数组[0]
功能 主线程()
    变量 返回值,数组大小,i
    句柄数组=数组[1]
    返回值=系统.枚举("叱咤风云",0)
    字符串.分割(返回值,"|",句柄数组)
    数组空间.大小(句柄数组,数组大小)//判断数组大小
   遍历(i=0;i<数组大小;i++)
        Ts=数组空间.重定义(Ts,真,i+1)//由于每开启一个线程就多需要一个天使对象,这里必须重新定义天使对象数组大小
        变量 参数=句柄数组[i]&","&i//合并参数 窗口句柄和i的值,i的值是为了传递给Ts[i] 这个对象,每开启一次i+1
        //有的朋友就在这里就绑定窗口,其实也是可以的,但我不太喜欢这种做法.
        线程.扩展开启("TC多开测试.子线程",参数,"TC多开测试.解绑",i)//开启分线程
        辅助.等待(100)//等待一下,避免多个线程同时绑定窗口,导致绑定失败
   遍历结束
功能结束
功能 子线程(参数)//接受参数   var 参数=句柄数组[i]&","&i
    变量 i,窗口句柄,绑定返回值
    参数数组=数组[1]
    字符串.分割(参数,",",参数数组)//分割出传过来的参数 i和窗口句柄的值
    窗口句柄=参数数组[0]
    i=参数数组[1]
    Ts[i]=com("dm.dmsoft")//创建天使对象
    绑定返回值=Ts[i].BindWindow(窗口句柄,"dx2","normal","normal",0)//绑定
    辅助.等待(1000)
    如果(绑定返回值==0)
        help.messagebox("绑定失败")
        返回 假
    否则
        Ts[i ].SetPath(辅助.获取资源路径("rc:"))
        Ts[i].SetDict(0,"jh.txt")
        窗口.激活(窗口句柄)
        窗口.还原(窗口句柄)
        TC多开测试.到达1(i,窗口句柄)
        辅助.等待(100)
    如果结束
功能结束
功能 解绑(i)
   Ts[i].UnBindWindow()
返回 真
功能结束
功能 移动(i,窗口句柄)
    x,y,x1,y1
    线程.进入临界区(对象句柄)
    遍历(5)
                  窗口.激活(窗口句柄)
        窗口.还原(窗口句柄)
        //线程.进入临界区(对象句柄)
        Ts[i].FindPic(0,0,1024,768,"地图1.bmp","000000",0.9,0,x,y)
        如果(x>0)
            //线程.进入临界区(对象句柄)
          //窗口.激活(窗口句柄)
        //窗口.还原(窗口句柄)
            辅助.等待(100)
            //窗口.窗口转屏幕(窗口句柄,x,y,x1,y1)
            //超级鼠标.移动(x1-66,y1+594)
            Ts[i].MoveTo(x-66,y+594)
            辅助.等待(50)
            超级鼠标.左键单击()
            辅助.等待(50)
            超级键盘.按键(8,7)
            辅助.等待(50)
            超级键盘.发送字符串(a)
            辅助.等待(50)
            //超级鼠标.移动(x1-18,y1+600)
            Ts[i].MoveTo(x-18,y+600)
            辅助.等待(50)
            超级鼠标.左键单击()
            辅助.等待(50)
            超级键盘.按键(8,7)
            辅助.等待(50)
            超级键盘.发送字符串(b)
            辅助.等待(50)
            //超级鼠标.移动(x1+12,y1+590)
            Ts[i].MoveTo(x+12,y+590)
            辅助.等待(50)
            超级鼠标.左键单击()
            辅助.等待(100)
            超级键盘.按键(77)
            辅助.等待(100)
            //线程.离开临界区(对象句柄)
            跳出
        否则
               //线程.离开临界区(对象句柄)
            超级键盘.按键(77)
            辅助.等待(1000)
        如果结束
    遍历结束
    线程.离开临界区(对象句柄)
功能结束
功能 到达1(i,窗口句柄)
    intX,intY
    x,y
    长度
    字符串
    遍历(50)
        字符串=Ts[i].Ocr(907,100,958,122,"ffffff-000000",1.0)
        长度=字符串.长度(字符串)
        如果(长度>4)
            变量 返回串=数组[2]   
            源串=字符串,分隔符=","
            是否成功=字符串.分割(源串,分隔符,返回串)
            变量 数量,g=0
            数组空间.大小(返回串,数量) //获取数组维数
            如果(是否成功)
                w=返回串[g]
                q=返回串[g+1]
                e=类型.转整型(w,0)-a
                r=类型.转整型(q,0)-b
                整型 绝对数a
                整型 绝对数b
                绝对数a=数学.绝对值(e)
                绝对数b=数学.绝对值(r)
                如果(绝对数a<=1&&绝对数b<=1)
                    跳出
                否则
                    TC多开测试.移动(i,窗口句柄)
                    辅助.等待(2000)
                    TC多开测试.跑路中(i,窗口句柄)
                如果结束
            否则
                辅助.等待(100)
            如果结束
        否则
            辅助.等待(100)
        如果结束
    遍历结束
    返回 真
    //函数返回语句
功能结束
功能 跑路中(i,窗口句柄)
    intX,intY
    x,y
    遍历(50)
        字符串=Ts[i].Ocr(907,100,958,122,"ffffff-000000",1.0)
        辅助.等待(1000)
        字符串1=Ts[i].Ocr(907,100,958,122,"ffffff-000000",1.0)
        如果(字符串==字符串1)
            跳出
        否则
            辅助.等待(500)
        如果结束
    遍历结束
    返回 真
    //函数返回语句
功能结束
功能 退出_点击()
    线程.关闭(线程句柄)
    辅助.退出()
功能结束
功能 开始_点击()
    对象句柄=线程.创建临界区()
//这里添加你要执行的代码
线程句柄=线程.开启("TC多开测试.主线程",对象句柄)
功能结束
空间结束

附上源码 测试了一天 才能正常实现功能,唯一不足的是 线程没执行完 点 退出 程序就经常卡死!
大神路过 帮忙看看写对没有 还有什么 注意的么!


回复

使用道具 举报

沙发
发表于 2014-5-8 08:51:43 | 只看该作者
本帖最后由 一只熊 于 2014-5-8 08:54 编辑

用什么临界区啊,临界区不是用来多开用的,如果要用临界区来多开,直接前台数组多开更实在。。。临界区的主要作用是多线程访问同一个不能被同时访问的资源的时候加锁用的,多开可以参考我的这个帖子。。。。http://bbs.tyuyan.com/thread-39976-1-1.html
回复 支持 反对

使用道具 举报

板凳
 楼主| 发表于 2014-5-8 12:58:20 | 只看该作者
...你这个 好像对应前台按键一点用处都没有!!!
回复 支持 反对

使用道具 举报

地板
发表于 2014-5-8 17:50:50 | 只看该作者
临界区比喻成排队办身份证

谁在前面,谁就先办身份证,等办完后才到下一位,这个就是临界区的特点

在多开,临界区用在多开自动换号最实在,

而临界区大部分都是前台多开应用比较多!
回复 支持 反对

使用道具 举报

*滑动验证:
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关闭

站长推荐上一条 /2 下一条

关闭

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

GMT+8, 2025-9-27 11:28 , Processed in 0.194087 second(s), 22 queries .

Powered by 海安天坑软件科技有限公司

© 2001-2013 Comsenz Inc.

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