TC官方合作论坛

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

[问题] 关于线程的混乱问题,以及重复开启问题,关掉没反应的问题

[复制链接]
跳转到指定楼层
楼主
发表于 2012-5-27 20:05:49 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
第一个是线程句柄1..第二个事线程句柄2.这两个是用来判断卡屏的因为人物所在场景有三个.所以必须找两张图片才能判断卡没卡住.而线程句柄则是主线程.同时开启这三个线程.当这两个检查卡屏线程的任意一个条件满足时,就关闭主线程,也就是线程句柄.当然为了防止另外一个卡屏线程重复检查卡屏.我们将另外个检查卡屏的给关掉.然后关掉游戏,开起主线程.问题来了,为什么好像线程句柄也就是主线程没有被关掉.还在执行.求大神看下......代码有错吗.为什么会有重复线程 的出现.或者看看能不能并成一个线程.这个问题比较棘手..希望大神有时间给看看..file:///C:/Documents%20and%20Settings/Administrator/Application%20Data/Tencent/Users/851831481/QQ/WinTemp/RichOle/AMWD%60%7BE%7DIDM]F30LFO]_RO1.jpg 看不是已经关掉了吗.......怎么线程句柄还在执行....






本帖子中包含更多资源

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

x
回复

使用道具 举报

沙发
 楼主| 发表于 2012-5-27 20:14:23 | 只看该作者
代码传好了........大神踊跃发言奥
回复 支持 反对

使用道具 举报

板凳
 楼主| 发表于 2012-5-27 20:20:27 | 只看该作者
看来问题相当棘手,估计得等到天神的降临才有人能破解此难题
回复 支持 反对

使用道具 举报

地板
发表于 2012-5-27 20:29:10 | 只看该作者
  按下主机的开机按钮~ 搞定
回复 支持 反对

使用道具 举报

5#
发表于 2012-5-27 20:30:36 | 只看该作者
不愧是小小大神,果然厉害,所言正如我想
回复 支持 反对

使用道具 举报

6#
发表于 2012-5-27 21:07:41 | 只看该作者
所以必须找两张图片才能判断卡没卡住
当这两个检查卡屏线程的任意一个条件满足时,就关闭主线程,

根据这2点,应该不需要开2个线程去判断吧???
直接找多图不就得了??只要任意一张找到,同样关闭主线程,这样就少了一个线程.控制逻辑上也简单了点
回复 支持 反对

使用道具 举报

7#
发表于 2012-5-27 21:11:50 | 只看该作者
  这样的代码应该有问题。。 你在一个线程里  如果关闭了本身   你后面的代码就不会执行的了   
你执行的线程关闭1  如果这句是从线程1开启的 你关闭了他了 那么后面那句线程关闭 是不会执行的
虽然线程几乎是同步执行的 但是应该还是有个时间差的 毕竟程序是一步一步向下走的
回复 支持 反对

使用道具 举报

8#
 楼主| 发表于 2012-5-27 21:17:48 | 只看该作者
...不是关本身,是关掉另外个监测卡屏的奥
回复 支持 反对

使用道具 举报

9#
发表于 2012-5-27 21:25:27 | 只看该作者
回复 8楼无处藏身的帖子

慢慢调试吧  我也碰到很多这样的问题 如果你确定主线程没有关掉  就是说这句没有执行
多考虑下逻辑  他没执行 但是他前面的那句如果肯定执行了 意思就是  前面的执行之后 这个线程就消失了
才没有执行到关闭主线程
在第一个关闭线程的命令那里下个断
进来了就说明条件满足了
再单步调试.看执行到哪了
没进来就是这个判断可能都有问题
这样来找找问题出在哪
回复 支持 反对

使用道具 举报

10#
发表于 2012-5-27 21:41:09 | 只看该作者
这个问题是一个经典的多线程问题。线程的执行都是抢占式的,比如说两个线程同时运行,可以线程一一直在运行,而线程二一次也没有运行。所以在一个线程中关闭另一个线程这种做法并身就带有不确定性。
举个例子:A线程关闭B线程,A正好执行到thread.closeThread(B)句时被线程B抢到了CPU,而线程B正好又可能执行到了thread.closeThread(A),这时就麻烦了,死锁了。呵呵

解决办法,采用“同步锁”方式解决,什么是同步锁,说白了就一个全局变量,每一次线程运行时,都去判断此变量
,如果可以运行,就继续运行。不能运行就自已退出循环。

这两种方式就好比 他杀与自杀。你采用的是杀方式,你杀别人,别人肯定反抗。而同步锁采用的是自杀方式,自杀当然就没有反抗了。

代码
int falg = true //同步锁

线程代码
while(true)
     if(flag == false)
         break
     endif
     if( 找到图)
        flag == false
    endif
endwhile
回复 支持 反对

使用道具 举报

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

本版积分规则

关闭

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

关闭

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

GMT+8, 2025-10-14 11:51 , Processed in 0.175854 second(s), 25 queries .

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

© 2001-2013 Comsenz Inc.

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