|
马上加入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
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
|