TC官方合作论坛

标题: 循环里运行临界区程序就卡死! [打印本页]

作者: sc2908    时间: 2014-5-7 13:49
标题: 循环里运行临界区程序就卡死!
这个怎么解决啊

比如我 要 循环 找 两个图
功能 找图1()
循环(真)
        dm.FindPic(0,0,1024,768,"地图1.bmp","000000",0.9,0,x,y)
        如果(x>0)

线程.进入临界区(对象句柄)
超级鼠标.移动(x,y)
辅助.等待(50)
超级鼠标.左键单击(1)
线程.离开临界区(对象句柄)
如果结束
循环结束
功能结束
功能 找图2()
循环(真)
        dm.FindPic(0,0,1024,768,"地图2.bmp","000000",0.9,0,x1,y1)
        如果(x1>0)

线程.进入临界区(对象句柄)
超级鼠标.移动(x1,y1)
辅助.等待(50)
超级鼠标.左键单击(1)
线程.离开临界区(对象句柄)
如果结束

循环结束
功能结束
    对象句柄=线程.创建临界区()    //创建临界区对象
    句柄A=线程.开启("事件测试A.找图1",对象句柄)
    句柄B=线程.开启("事件测试A.找图2",对象句柄)
    线程.等待(句柄A,-1)
    线程.等待(句柄B,-1)
    线程.删除临界区(对象句柄)


我要 无限找 这两个 图 找到了 就去 依次点击
怎么问题来了 我 发现 死循环里面  运行 或则长时间 运行 进入和 离开 临界区的 功能  程序就   卡死了  有没什么方法 解决啊!



作者: sc2908    时间: 2014-5-7 14:17
  对象句柄=线程.创建临界区()    //创建临界区对象
    句柄A=线程.开启("事件测试A.找图1",对象句柄)
    句柄B=线程.开启("事件测试A.找图2",对象句柄)

奶奶的 原来 是 下面这个几条 口令的 问题!
    线程.等待(句柄A,-1)
    线程.等待(句柄B,-1)
    线程.删除临界区(对象句柄)
去掉下面的 口令  就正常了 哎 看来  那个 帮组文档也不能 全抄啊!
作者: jimye0526    时间: 2014-5-7 16:38
你用法不对,你这样频繁的进入出去临界区,而且是多个线程线程抢一个临界区 有点坑啊你

一般临界区里经量写的是代码块,你就这一点点代码,而且循环每个延时,还有你就不能开一个线程么,你这个代码一个线程不用临界区,就顺序找图也可以实现啊
作者: sc2908    时间: 2014-5-7 17:23
我 几千行的代码不可能都 发布上来吧!
只是 打个 比方啊!  再说 意思都一样
我 做一个游戏 的 前台3开
那么 没几秒 可能就 要 切换窗口一次  暂停其他 线程一次啊!
作者: 墨染年华    时间: 2014-5-7 17:38
你不行就用线程  事件来控制   找1 不找2   找2不找1   依次寻找




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