TC官方合作论坛

标题: 为什么加入临界区就出现内存不足的现象啊! [打印本页]

作者: 2811663    时间: 2013-10-6 09:19
标题: 为什么加入临界区就出现内存不足的现象啊!
空间 古剑奇谭2
//默认空间

对象句柄

功能 自动登录()
   
    路径=浏览框.获得("浏览框0")      
    如果(路径=="")
        辅助.消息框("请选择游戏路径!")
       返回 1
        如果结束
    如果(字符串.查找字符串(路径,"GuJian2.exe")<0)
        辅助.消息框("请选择正常的游戏路径!")
        返回 2
        如果结束
    账号=编辑框.获得文本("编辑框0")
   
    如果(账号=="")
    辅助.消息框("请输入账号!")
    返回 3
    如果结束
    密码=编辑框.获得文本("编辑框1")
    如果(密码=="")
    辅助.消息框("请输入密码!")
   返回 4
    如果结束
    进程.打开(路径)
     
    辅助.等待(500)
    //说明:支持多张图片(图片与图片中间使用 竖线隔开)和根据四角的颜色判断是否为透明图
   
    线程.开启("古剑奇谭2.循环线程","")
    辅助.等待(500)
    线程.开启("古剑奇谭2.开始画面","")
    辅助.等待(500)
    线程.开启("古剑奇谭2.登录画面","")
    辅助.等待(500)
    线程.进入临界区(对象句柄)
    辅助.等待(200)
    鼠标.移动(632,587)
    鼠标.左键单击(1)
    辅助.等待(200)
    鼠标.移动(666,376)
    鼠标.左键单击(1)
    线程.离开临界区(对象句柄)

功能结束


功能 循环线程()
    线程.进入临界区(对象句柄)
    图片X坐标,图片Y坐标
    循环(图像.找图(0,0,1440,900,"rc:开始游戏.bmp",0,1.0,0,图片X坐标,图片Y坐标)<0)
        辅助.等待(20)
    循环结束
    鼠标.移动(图片X坐标,图片Y坐标)
    鼠标.左键单击(1)
    线程.离开临界区(对象句柄)  
功能结束
功能 开始画面()
    线程.进入临界区(对象句柄)
    图片X坐标,图片Y坐标
    循环(图像.找图(0,0,1440,900,"rc:cg.bmp",0,0.5,0,图片X坐标,图片Y坐标)<0)
        辅助.等待(20)
    循环结束
    键盘.按键(27,1)
    辅助.等待(1500)
    键盘.按键(27,1)
   线程.离开临界区(对象句柄)
功能结束
功能 登录画面()
    线程.进入临界区(对象句柄)
    图片X坐标,图片Y坐标
    循环(图像.找图(0,0,1440,900,"rc:开始画面.bmp",0,1.0,0,图片X坐标,图片Y坐标)<0)
        辅助.等待(20)
    循环结束
    键盘.发送字符串(编辑框.获得文本("编辑框0"))
    辅助.等待(20)
    键盘.按键(9,1)
    辅助.等待(20)
    键盘.发送字符串(编辑框.获得文本("编辑框1"))
     线程.离开临界区(对象句柄)
功能结束





//开始按钮_点击操作
功能 开始_点击()
    线程.开启("古剑奇谭2.自动登录","")   
功能结束

//退出按钮_点击操作
功能 退出_点击()
   
    辅助.退出()
功能结束
功能 初始化()
对象句柄=线程.创建临界区()
返回 真
功能结束
   


空间结束
//空间结束语句
作者: 2811663    时间: 2013-10-6 09:23
本来把找图直接写到外面排下来可以运行的,但是因为是个循环比较容易卡死,就写成线程,但是线程比较多容易混乱,就加入临界区。但是加入临界区之后已启动就弹好几个内存不足的框出来。脚本也不正常运行了。。。求师傅指点下!
作者: klyyz1980    时间: 2013-10-6 10:54
临界区是用来轮流执行共享资源的,如果没有共享资源就不要使用临界区,不是你说的乱了才使用临界区,乱了是因为你的逻辑方法有问题
作者: 2811663    时间: 2013-10-6 11:31
回复 3楼klyyz1980的帖子

但是这些循环语句如果没有临界区的话,他会不依次执行的,会提早运行,还有之后那些鼠标动作也不是依次运行,线程之间就运行了
作者: 2811663    时间: 2013-10-6 11:32
大神来搭救下!
作者: 2811663    时间: 2013-10-6 13:54
空间 临界区测试
//默认空间
对象句柄
功能 线程测试()
线程.开启("临界区测试.线程1","")   
  辅助.等待(50)  
线程.开启("临界区测试.线程2","")      
   
功能结束   
   
功能 线程1()
    线程.进入临界区(对象句柄)
    辅助.消息框("执行线程1")
    辅助.等待(5000)
    线程.离开临界区(对象句柄)
功能结束

功能 线程2()

辅助.消息框("执行线程2")

功能结束


//开始按钮_点击操作
功能 开始_点击()
线程.开启("临界区测试.线程测试","")
功能结束

//退出按钮_点击操作
功能 退出_点击()

辅助.退出()
功能结束
功能 初始化()
   
对象句柄=线程.创建临界区()

功能结束
空间结束
//空间结束语句


就连这么简单的线程测试都会内存不足,怎么回事啊。凡是触及临界区的都会内存不足。或者是我写的临界区脚本有什么问题
作者: klyyz1980    时间: 2013-10-6 15:23
搞不懂你这么几行为何要用这么多的线程
作者: 2811663    时间: 2013-10-6 15:29
回复 7楼klyyz1980的帖子

这个只是个测试,如果在线程加多些程序他一样内存不足啊
作者: klyyz1980    时间: 2013-10-6 15:32
仔细核对帮助文档
作者: awlbm    时间: 2014-8-29 00:40
线程.开启("临界区测试.线程1","")   
  线程.等待。。。。。。




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