TC官方合作论坛

 找回密码
 立即注册
查看: 2770|回复: 15

[已解决] 多线程 总是自动停止,怎么办。

[复制链接]
发表于 2016-12-2 12:59:48 | 显示全部楼层 |阅读模式

马上加入TC

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

x
本帖最后由 d2062489h 于 2016-12-2 15:44 编辑

15个线程,每个线程控制一个客户端,运行1~2个小时就自己停了。。。怎么解决?全局变量 就两个全局的数组,写入的部分 已经全部加入了临界区,读取的 部分没有加,是不是跟这个有关系?已经搞了好久了,就是解决不了,能位置4个小时也行啊,也就一个多小时。诶。怎么弄?

电脑配置 6700K+Z170+DDR4 3600 16G +GTX970
脚本平均占CPU8%~15% 这样。忍了,
内存2个小时能彪到400MB。。。。。
开了个定时清理内存的软件,大概能维持在 40MB~300MB之间。。。
我感觉 还是太夸张了,除了清理进程内存的命令外,这个脚本里面是什么让内存彪那么快,已经把每次的变量都清成NULL,还有什么方法能不让内存一直自己增长那么快?

怎么办!

怎么办!
怎么办!!!!!

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
var 线程ID=array(0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),status=array(0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),临界区句柄1=0,检测线程句柄=0,临界区句柄=0
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
function 挂机_初始化()//初始化模块   
    settray("my_tray", false)
    setdict("D:/新版.txt", 0)
    临界区句柄=criticalcreate()
    临界区句柄1=criticalcreate()
end
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
//所有按钮开启按钮对应    开启("0")~ 开启("15")
function 按钮0_点击()
    开启("0")
    return 0
end
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
function 开启(参数1)//开启线程 & 关闭线程
    if(线程ID[参数1]==0)
        线程ID[参数1]=threadbegin("主循环",参数1)
        staticsetcolor("标签"&参数1, #00ff00, 1)
    elseif(线程ID[参数1]!=0)
        threadclose(线程ID[参数1],1)
        线程ID[参数1]=0
        staticsetcolor("标签"&参数1, #ff0000, 1)
        staticsettext("坐标"&参数1,"")
    end
    参数1=""
end
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
function 主循环(编号)
    sleep(1000)
    var hwnd
    hwnd=filereadini("杂项","句柄"&编号,"D:\\挂机\\Config.ini")
    while(true)
        跑图(hwnd,编号)
        sleep(500)
    end
    hwnd=""
    编号=""
    return 0
end
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
function 跑图(hwnd,number)
    var ret,path,x,y,num,x1,y1,thismap,mapname,time,thismap1
    thismap=windowocr(hwnd,0,65,71,88,"e4e4e2-010101",1.0)
    mapname=windowocr(hwnd,0,36,225,68,"e4e4e2-010101",0.9)
    staticsettext("坐标"&number,thismap)
    if(mapname=="Dyna Mine")
        select(windowfindpic(hwnd,0,0,949,700,"rc:room1.bmp|rc:room2.bmp|rc:room3.bmp|rc:room4.bmp|rc:room5.bmp","050505",0.9,0,x,y))
            case "0"
            thismap="room1"
            case "1"
            thismap="room2"
            case "2"
            thismap="room3"
            case "3"
            thismap="room4"
            case "4"
            thismap="room5"
        end
    end
    //选择是否在洞里
    if((mapname==filereadini("mapname","name","D:\\挂机\\跑图"&number&".ini")&&(filereadini("mapname","name","D:\\挂机\\跑图"&number&".ini")!=""))||(strleft(thismap,4)=="room"))
        path="D:\\挂机\\洞"&number&".ini"
    else
        path="D:\\挂机\\跑图"&number&".ini"
    end
    检测(hwnd,number)
    //判断是不是负重满,满了跑银行
    if((windowcmpcolor(hwnd,720,780,"000000-000000",1.0)!=0)&&((filereadini("isneed","isneed","D:\\挂机\\存银行"&number&".ini")==1)||((filereadini("isneed","isneed","D:\\挂机\\存银行"&number&".ini")==0)&&(thismap==filereadini("cheakmap","id","D:\\挂机\\存银行"&number&".ini"))&&(mapname!="Astrub(Tunnels)")&&(mapname!="Incarnam(Mine)"))))
        if(filereadini("isneed","isneed","D:\\挂机\\存银行"&number&".ini")==1)
            写日志(number&"号开始回传送门")
            回传送门(hwnd)
            sleep(2000)
        end
        跑银行(hwnd,number)
        return 0
    end
    sleep(50)
    //选择过土方向!!
    select(filereadini(thismap,"方向"&status[number],path))
        case "u"
        x1=460
        y1=2+30
        case "d"
        x1=460
        y1=670+30
        case "l"
        x1=2
        y1=385+30
        case "r"
        x1=948
        y1=385+30
        case "s"
        x1=filereadini(thismap,"sx"&status[number],path)
        y1=filereadini(thismap,"sy"&status[number],path)
        case "sd"
        下地(hwnd)
        return 0
        case "su"
        上天(hwnd)
        return 0
        case "0"
        criticalenter(临界区句柄1)
        status[number]=0
        criticalleave(临界区句柄1)
        return 0
        case "1"
        criticalenter(临界区句柄1)
        status[number]=1
        criticalleave(临界区句柄1)
        return 0
        case "2"
        criticalenter(临界区句柄1)
        status[number]=2
        criticalleave(临界区句柄1)
        return 0
        case "3"
        criticalenter(临界区句柄1)
        status[number]=3
        criticalleave(临界区句柄1)
        return 0
        case "4"
        criticalenter(临界区句柄1)
        status[number]=4
        criticalleave(临界区句柄1)
        return 0
        default
        if((filereadini(thismap,"go","D:\\挂机\\存银行"&number&".ini")=="")&&(filereadini(thismap,"back","D:\\挂机\\存银行"&number&".ini")==""))
            写日志(number&" 号发现未知方向!!!!")
            return 0
        else
            跑银行(hwnd,number)
        end
    end
    //采集
    if((filereadini(thismap,"num",path)!=0)&&(windowcmpcolor(hwnd,735,780,"000000-000000",1.0)==0))
        for(var i=0;i<2;i++)
            num=filereadini(thismap,"num",path)
            采集(hwnd,num,number,path,thismap)
        end
    end
    检测(hwnd,number)
    if((thismap!=windowocr(hwnd,0,65,71,88,"e4e4e2-010101",1.0))&&(strleft(thismap,4)!="room"))
        return 0
    end
    //点击选择的方向
    windowleftclick(hwnd,x1,y1)
    sleep(100)
    //点击以后等待过图
    time=timenow()
    while(timediff("s",time,timenow())<10)
        检测(hwnd,number)
        if(((windowocr(hwnd,0,65,71,88,"e4e4e2-010101",1.0)!=thismap)&&(strleft(thismap,4)!="room"))||(windowocr(hwnd,0,36,225,68,"e4e4e2-010101",0.9)!=mapname))
            break
        end
        if(mapname=="Dyna Mine")
            select(windowfindpic(hwnd,0,0,949,700,"rc:room1.bmp|rc:room2.bmp|rc:room3.bmp|rc:room4.bmp|rc:room5.bmp","050505",0.9,0,x,y))
                case "0"
                thismap1="room1"
                case "1"
                thismap1="room2"
                case "2"
                thismap1="room3"
                case "3"
                thismap1="room4"
                case "4"
                thismap1="room5"
            end
            if(thismap1!=thismap)
                break
            end
        end
        sleep(1000)
    end
    sleep(1000)
    hwnd=""
    number=""
    ret=""
    path=""
    x=""
    y=""
    num=""
    x1=""
    y1=""
    thismap=""
    mapname=""
    time=""
    thismap1=""
    return 0
end
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
function 采集(hwnd,num,number,path,thismap)
    var ret,x,y,itemnum,x1,y1,x2,y2,k
    if((checkgetstate("复选框1")==true)||(windowcmpcolor(hwnd,730,780,"000000-000000",1.0)!=0))
        return 0
    end
    for(var i=0;i<num;i++)
        //获取坐标!
        x1=filereadini(thismap,"x"&i,path)
        y1=filereadini(thismap,"y"&i,path)
        检测(hwnd,number)
        //点击坐标
        windowleftdown(hwnd,x1,y1)
        sleep(editgettext("编辑框1"))
        //查找是否可采集过程
        x2=x1
        y2=y1
        if(x2+140>949)
            x2=809
        end
        if(x2-90<0)
            x2=90
        end
        if(y2-170<0)
            y2=170
        end
        if(y2+90>704)
            y2=614
        end
        ret=windowfindpic(hwnd,x2-90,y2-140,x2+140,y2+90,"rc:gather.bmp|rc:fish.bmp|rc:chop.bmp|rc:reap.bmp|rc:mine.bmp|rc:draw.bmp","050505",0.9,0,x,y)
        if(ret>=0)
            ret=-1
            windowleftup(hwnd,x1,y1)
            sleep(100)
            itemnum=windowocr(hwnd,596,708,693,752,"ffffff-000000",1.0)
            for( k = 0; k < 35; k++)
                if(windowocr(hwnd,596,708,693,752,"ffffff-000000",1.0)!=itemnum)
                    break
                end
                if(windowocr(hwnd,0,704,277,775,"dd820d-0b0701",1.0)!="")
                    clear(hwnd,number)
                    break
                end
                sleep(300)
            end
        end
        sleep(editgettext("编辑框11"))
    end
    hwnd=""
    num=""
    number=""
    path=""
    thismap=""
    ret=""
    x=""
    y=""
    itemnum=""
    x1=""
    y1=""
    x2=""
    y2=""
    k=""
    return 0
end
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
function 检测(hwnd,num)
    var x,y
    if(windowcmpcolor(hwnd,275,706,"242424-000000|191919-000000",1.0)==-1)
        自动登录(hwnd,num)
    end
    if(windowfindpic(hwnd,251,765,283,797,"rc:solo.bmp","050505",0.9,0,x,y)==0)
        solo(hwnd)
    end
    if(windowfindpic(hwnd,802,757,861,791,"rc:战斗指示.bmp","000000",0.9,0,x,y)==0)
        战斗(hwnd,num)
    end
    if(windowfindpic(hwnd,421,460,470,700,"rc:战斗结束.bmp","050505",0.9,0,x,y)==0)
        windowsendkeypress(hwnd,13)
        sleep(200)
    end
    if(windowfindpic(hwnd,289,172,587,389,"rc:技能升级.bmp","050505",0.9,0,x,y)==0)
        windowsendkeypress(hwnd,13)
        sleep(200)
    end
    if(windowfindpic(hwnd,302,441,505,567,"rc:升级.bmp","020202",0.9,0,x,y)==0)
        windowsendkeypress(hwnd,13)
        sleep(200)
    end
    if(windowfindpic(hwnd,267,450,278,462,"rc:almanax.bmp","020202",0.9,0,x,y)==0)
        windowleftclick(hwnd,x,y)
        sleep(200)
    end
    hwnd=""
    num=""
    x=""
    y=""
    hwnd=""
    num=""
    return 0
end
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
function 自动登录(hwnd,编号)
    写日志(编号&"号从新登录!")
    var x,y,叉,主界面,不可输入,可输入,密码空,账号空,角色选择,服务器选择
    while(true)
        if(windowcmpcolor(hwnd,275,706,"242424-000000|191919-000000",1.0)!=-1)
            break
        end
        叉 = windowfindpic(hwnd,0,0,950,693,"rc:叉.bmp|rc:自动登录OK.bmp","101010",0.9,0,x,y)
        主界面 = windowfindpic(hwnd,386,210,568,237,"rc:主界面.bmp","020202",0.9,0,x,y)
        可输入 = windowfindpic(hwnd,335,270,620,332,"rc:可输入.bmp","020202",0.9,0,x,y)
        账号空 = windowfindpic(hwnd,424,263,489,291,"rc:账号空.bmp","020202",0.9,0,x,y)
        密码空 = windowfindpic(hwnd,346,306,442,336,"rc:密码空.bmp","020202",0.9,0,x,y)
        角色选择 = windowfindpic(hwnd,386,231,568,254,"rc:角色选择.bmp","020202",0.9,0,x,y)
        服务器选择 = windowfindpic(hwnd,400,231,600,254,"rc:服务器选择.bmp","020202",0.9,0,x,y)
        sleep(1000)
        if(叉 >= 0)
            windowpostkeypress(hwnd, 13)
            sleep(300)
        end
        if(角色选择==0)
            windowleftclick(hwnd, 473,631)
            sleep(300)
        end
        if(服务器选择==0)
            windowpostkeypress(hwnd, 27)
            sleep(300)
            windowleftclick(hwnd, 475,392)
            sleep(300)
            windowpostkeypress(hwnd, 13)
            sleep(300)
        end
        if((主界面==0)&&(可输入==0)&&(账号空!=0))
            windowleftclick(hwnd, 500,276)
            sleep(100)
            windowsendkeydown(hwnd, 17)
            windowsendkeypress(hwnd, 65)
            windowsendkeyup(hwnd, 17)
            windowsendkeypress(hwnd, 8)
            sleep(100)      
        end
        if((主界面==0)&&(可输入==0)&&(密码空!=0))
            windowleftclick(hwnd, 500, 320)
            sleep(100)
            windowsendkeydown(hwnd, 17)
            windowsendkeypress(hwnd, 65)
            windowsendkeyup(hwnd, 17)
            windowsendkeypress(hwnd, 8)
            sleep(100)
        end
        if((主界面==0)&&(可输入==0)&&(账号空==0)&&(密码空==0))
            windowleftclick(hwnd,500,276)
            sleep(100)
            windowsendstring(hwnd,filereadini("杂项", "账号"&编号, "D:\\挂机\\Config.ini"))
            sleep(500)
            windowleftclick(hwnd, 500, 320)
            sleep(100)
            windowsendstring(hwnd,filereadini("杂项", "pasd"&编号, "D:\\挂机\\Config.ini"))
            sleep(500)
            windowsendkeypress(hwnd, 13)
            sleep(100)
        end
        sleep(500)
    end
    编号=""
    hwnd=""
    x=""
    y=""
    叉=""
    主界面=""
    不可输入=""
    可输入=""
    密码空=""
    账号空=""
    角色选择=""
    服务器选择=""
    return 0
end
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
function 跑银行(hwnd,number)
    var path,cheakmapid,thismap,ret,方向,x,y
    path="D:\\挂机\\存银行"&number&".ini"
    写日志(number&"号开始跑银行")
    while(true)
        检测(hwnd,number)
        cheakmapid=filereadini("cheakmap","id",path)
        thismap=windowocr(hwnd,0,65,71,88,"e4e4e2-010101",1.0)
        staticsettext("坐标"&number,thismap)
        //如果在检查负重点,又没负重,返回
        if((thismap==cheakmapid)&&(windowcmpcolor(hwnd,435,780,"000000-000000",1.0)==0))
            break
        end
        //如果在银行外,又满负重,存银行
        if((thismap=="4-16")&&(windowcmpcolor(hwnd,570,780,"000000-000000",1.0)!=0))
            存银行(hwnd,number)
            sleep(300)
        end
        //如果负重是满的,就开始往银行跑!
        if(windowcmpcolor(hwnd,570,780,"000000-000000",1.0)!=0)
            方向=filereadini(thismap,"go",path)
            if(方向=="u")
                x=460
                y=2
            elseif(方向=="d")
                x=460
                y=670
            elseif(方向=="l")
                x=2
                y=385
            elseif(方向=="r")
                x=948
                y=385
            elseif(方向=="sd")
                下地(hwnd)
            elseif(方向=="su")
                上天(hwnd)
            end
            windowleftclick(hwnd,x,y+30)
            sleep(300)
            for(var i=0;i<20;i++)
                if((windowocr(hwnd,0,65,71,88,"e4e4e2-010101",1.0)!=thismap)&&(windowocr(hwnd,0,65,71,88,"e4e4e2-010101",1.0)!=""))
                    break
                end
                sleep(500)
            end
        end
        //如果没有负重,往回跑
        if(windowcmpcolor(hwnd,570,780,"000000-000000",1.0)==0)
            方向=filereadini(thismap,"back",path)
            if(方向=="u")
                x=460
                y=2
            elseif(方向=="d")
                x=460
                y=670
            elseif(方向=="l")
                x=2
                y=385
            elseif(方向=="r")
                x=948
                y=385
            elseif(方向=="sd")
                下地(hwnd)
            elseif(方向=="su")
                上天(hwnd)
            else
                return 0
            end
            windowleftclick(hwnd,x,y+30)
            sleep(300)
            for(var i=0;i<20;i++)
                if((windowocr(hwnd,0,65,71,88,"e4e4e2-010101",1.0)!=thismap)&&(windowocr(hwnd,0,65,71,88,"e4e4e2-010101",1.0)!=""))
                    break
                end
                sleep(500)
            end
        end
        sleep(1000)
    end
    写日志(number&"号结束跑银行")
    hwnd=""
    number=""
    path=""
    cheakmapid=""
    thismap=""
    ret=""
    方向=""
    x=""
    y=""
    return 0
end
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
function 存银行(hwnd,number)
    var x,y,在银行里,在银行外,是否空负重,打开银行,转移按钮,所有道具
    写日志(number&"号开始存银行")
    while(true)
        检测(hwnd,number)
        在银行外=windowfindpic(hwnd,590,140+30,660,210+30,"rc:银行大门.bmp","000000",0.9,0,x,y)//发现=0,没发现=-1
        在银行里=windowfindpic(hwnd,440,90+30,610,160+30,"rc:银行里.bmp","000000",0.9,0,x,y)//发现=0,没发现=-1
        是否空负重=windowcmpcolor(hwnd,415,750+30,"000000-000000",1.0)//是空负重=0,不是空负重=-1
        打开银行=windowfindpic(hwnd,190,490+30,260,560+30,"rc:打开银行.bmp","000000",0.9,0,x,y)//打开=0,没打开=-1
        转移按钮=windowfindpic(hwnd,688,78+30,722,112+30,"rc:转移按钮.bmp","000000",0.9,0,x,y)//有按钮=0,没按钮=-1
        所有道具=windowfindpic(hwnd,668,99,877,217,"rc:所有道具.bmp","151515",0.8,0,x,y)//有=0,没有=-1
        sleep(500)
        //在银行外边,又空负重
        if((在银行外==0)&&(是否空负重==0))
            break
        end
        //第一步,在银行外边,满负重,点进去
        if((在银行外==0)&&(是否空负重!=0))
            windowleftclick(hwnd,660,320+30)
            windowmousemove(hwnd,0,0)
            sleep(1000)
            for(var i=0;i<35;i++)
                if(windowfindpic(hwnd,440,90+30,610,160+30,"rc:银行里.bmp","050505",0.9,0,x,y)==0)
                    break
                end
                sleep(300)
            end
            continue
        end
        //第二步,到银行里面,点猫头鹰
        if((在银行里==0)&&(是否空负重!=0)&&(打开银行!=0)&&(转移按钮!=0)&&(所有道具!=0)&&(windowfindpic(hwnd,412,266,450,306,"rc:banknpc.bmp","000000",0.9,0,x,y)==0))
            windowleftclick(hwnd,589,333+30)
            sleep(1000)
            windowmousemove(hwnd,0,0)
            for(var i=0;i<35;i++)
                if(windowfindpic(hwnd,190,490+30,260,560+30,"rc:打开银行.bmp","000000",0.9,0,x,y)==0)
                    break
                end
                sleep(300)
            end
            continue
        end
        //第三步,点了猫头鹰以后 点开启银行
        if(打开银行==0)
            windowleftclick(hwnd,410,553+30)
            sleep(1000)
            windowmousemove(hwnd,0,0)
            for(var i=0;i<35;i++)
                if(windowfindpic(hwnd,688,78+30,722,112+30,"rc:转移按钮.bmp","050505",0.9,0,x,y)==0)
                    break
                end
                sleep(300)
            end
            continue
        end
        //第四步,开启了银行,点击转移按钮
        if((转移按钮==0)&&(是否空负重!=0))
            windowleftclick(hwnd,704,94+30)
            sleep(1000)
            windowmousemove(hwnd,0,0)
            for(var i=0;i<35;i++)
                if(windowfindpic(hwnd,668,99,877,217,"rc:所有道具.bmp","151515",0.8,0,x,y)==0)
                    break
                end
                sleep(300)
            end
            continue
        end
        //第五步,点击全部道具,把东西全部存进银行
        if((所有道具==0)&&(是否空负重!=0))
            windowleftclick(hwnd,729,105+30)
            sleep(1000)
            windowmousemove(hwnd,0,0)
            for(var i=0;i<35;i++)
                if(windowcmpcolor(hwnd,415,750+30,"000000-000000",1.0)==0)
                    break
                end
                sleep(300)
            end
            continue
        end
        //如果有转移所有道具菜单没关闭的时候,关闭
        if((所有道具==0)&&(是否空负重==0)&&(转移按钮!=0))
            windowsendkeypress(hwnd,27)
            sleep(1000)
            continue
        end
        //第六步,道具转移后,按ESC 关闭菜单
        if((转移按钮==0)&&(是否空负重==0))
            windowsendkeypress(hwnd,27)
            sleep(1000)
            for(var i=0;i<35;i++)
                if(windowfindpic(hwnd,688,78+30,722,112+30,"rc:转移按钮.bmp","050505",0.9,0,x,y)!=0)
                    break
                end
                sleep(300)
            end
            continue
        end
        //第七步,都弄完了,往外走
        if((是否空负重==0)&&(转移按钮!=0)&&(在银行里==0))
            windowleftclick(hwnd,294,476+30)
            sleep(1000)
            windowmousemove(hwnd,0,0)
            for(var i=0;i<35;i++)
                if(windowfindpic(hwnd,590,140+30,660,210+30,"rc:银行大门.bmp","050505",0.9,0,x,y)==0)
                    break
                end
                sleep(300)
            end
            continue
        end
        sleep(300)
    end
    写日志(number&"号结束存银行")
    hwnd=""
    number=""
    x=""
    y=""
    在银行里=""
    在银行外=""
    是否空负重=""
    打开银行=""
    转移按钮=""
    所有道具=""
    return 0
end
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
function 写日志(参数1)
      criticalenter(临界区句柄)
    editsettext("日志标签",editgettext("日志标签")&strright(timenow(),8)&" "&参数1&"\r\n")
    windowsendmessage(controlgethandle("日志标签"),277,7,0)
    criticalleave(临界区句柄)   
    return 0
end
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////


回复

使用道具 举报

发表于 2016-12-2 14:45:46 来自手机 | 显示全部楼层
代码太长不看了。

"15个线程,每个线程控制一个客户端"
你先开2个线程,控制2个客户端。
同时对这2线程 文件写日志(),对线程运行情况全面跟踪。
如果脚本异常退出的,就分析日志。
分析问题,解决问题。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2016-12-2 13:06:39 | 显示全部楼层
本帖最后由 d2062489h 于 2016-12-2 15:53 编辑

都放的上边了。

main.twin

17.23 KB, 下载次数: 401, 下载积分: 金币 -1 个

挂机.t

57.23 KB, 下载次数: 431, 下载积分: 金币 -1 个

挂机.tcproj

279 Bytes, 下载次数: 456, 下载积分: 金币 -1 个

回复 支持 反对

使用道具 举报

 楼主| 发表于 2016-12-2 13:09:32 | 显示全部楼层
本帖最后由 d2062489h 于 2016-12-2 16:10 编辑

基本都是在    跑图>检测>采集>跑图>检测>采集> 的过程中 自己停的,自己停了以后 再启动,任务管理器里看,线程 也就5~6 能启动,其他的都没反应,启动了的线程也一动不动
只能关了从开,大概持续1~2个小时,自己就又停了。诶。

回复 支持 反对

使用道具 举报

发表于 2016-12-2 14:51:38 来自手机 | 显示全部楼层
2,对象型变量,才需要
***对象 = null

整型,浮点型,都是
变量名 = 0
字符型,
变量名 = ""

下面的代码做错了。会异常退出。
hwnd=null
    number=null
    ret=null
    path=null
    x=null
    y=null
    num=null
    x1=null
    y1=null
    thismap=null
    mapname=null
    time=null
    thismap1=null
    return 0

回复 支持 反对

使用道具 举报

发表于 2016-12-2 14:56:24 来自手机 | 显示全部楼层
3,新手操作多线程,多窗口时,普遍是不设计代码框架,代码乱七八糟的,造成异常。

【剑仙教程】面向框架的编程。
希望大家多分享经验,分享学习方法。
楼主分享学到的方法,面向框架的编程。
先设计代码框架,
再把
子函数一个一个加上去。
功能 主线程任务()
1、****
1、****
1、****
1、****
1、****
1、****
结束
功能 任务监测()
2、血量监测()
2、卡屏监测()
2、窗口无响应监测()
2、****
2、****
结束
也可以把子函数做成dll,在需要时调用。
要增加功能程序时,框架不用变,增加dll就可以。
更新程序时,框架也不用改,更新dll就可以。
这是稳定的事情,一劳永逸的写法。
经常这样写程序,编程的能力更强了。
回复 支持 反对

使用道具 举报

发表于 2016-12-2 14:57:13 来自手机 | 显示全部楼层
例如:
.
功能 主线程任务()
1、加红加蓝()
1、找怪打怪()
1、拾取物品()
1、定点回位()
1、整理背包()
1、回城补给()
结束
多数游戏 都可以这样做框架,再一个个写完子函数。
回复 支持 反对

使用道具 举报

发表于 2016-12-2 14:58:54 来自手机 | 显示全部楼层
4,新手操作多线程,多窗口,
普遍是代码带有死循环,代码乱七八糟的,造成脚本异常。
回复 支持 反对

使用道具 举报

发表于 2016-12-2 15:00:20 来自手机 | 显示全部楼层
5,新手操作多线程,多窗口,
普遍是不设置临界区,多个线程争夺同一个全局变量,,造成脚本异常。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2016-12-2 15:07:59 | 显示全部楼层
剑仙十号 发表于 2016-12-2 14:56
3,新手操作多线程,多窗口时,普遍是不设计代码框架,代码乱七八糟的,造成异常。

【剑仙教程】面向框架 ...

-_-b
其实 主框架 就在最上边,  下边是分边对应的 代码

只是个主体框架,通过识别当前窗口的坐标,然后读取事先做好的对应游戏窗口的对应坐标移动的INI 配置文件 实现不用一个游戏窗口做一套脚本的尴尬。

跑图
读取INI,找出对应坐标 下一步应该往哪走
读取INI  找出对应地图用不用采集
然后判断当前窗口状态
然后继续跑图
可能贴出来看着就乱套了。在TC上看 就是几个 function

因为一直是自己在努力,所以直到我自己实在没办法解决的时候才来问问别人,所以把所有代码贴出来看看到底是哪出的问题。
回复 支持 反对

使用道具 举报

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

本版积分规则

关闭

推荐上一条 /2 下一条

关闭

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

GMT+8, 2024-5-19 06:28 , Processed in 0.051916 second(s), 26 queries .

Powered by 海安简单软件服务部

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

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