第一次发帖(忍不住了)直接说问题
我需要实现的功能:
主线程开启子线程
子线程检测聊天区域,每隔1秒提取是否有“某某怪在哪里复活的”文字信息,如果检测到了,设置一个共享变量,把这个怪复活的信息放到这个共享变量里
主线程运行到某个环节,获取这个共享变量,如果共享变量不为空,并且是需要去击杀的怪,先设置一个共享变量为FALSE,子线程是循环执行的,当他获取到这个FALSE的指令后,将“某某怪在哪里复活的”个变量=NULL,在设置一个共享变量TRUE,主线程检测到这个TRUE指令后,执行Thread.Stop指令,关闭子线程。(我测试了,子线程关闭后,因为我是把“某某怪复活了(是一个表类型)”通过共享变量赋值给了主线程的一个变量,所以子线程关闭,主线程仍然可以使用这个变量,至于我为什么来回这样折腾,这个我后面会详细说明!)。主线程根据获取到的“某某怪复活”的信息去执行一段代码(其实就是去击杀这个BOSS)。然后主线程再次开启子线程(开启子线程的子线程函数名称,返回值放在哪个变量里和前面开启子线程相同,因为代码是一样的)。
好,问题来了:
1、第二次开启子线程后,我发现子线程直接产生了“某某怪在哪里复活的”的信息,并且和刚才的一模一样。我明明销毁了这个东西,怎么还在呢???更何况我明明执行了hread.Stop指令,怎么东西还在呢???
2、说一下为什么我要来回设置TRUE、FALSE变量来销毁东西,就是因为我发现执行了hread.Stop后东西还在,所以我想通过直接赋值NULL的方式删除变量,删除了再关闭子线程,但通过测试,发现失败了,实际上子线程是没关闭的,或者说是不能用了,但是东西还在memory了!
3、基于第二点,既然关闭了的线程再打开,信息还在,没事真正意义上的关闭,那开一次子线程,哪怕执行hread.Stop指令,占用的memory仍然会越来越大,这恐怕是灾难性的!!!
这个问题大伙儿有没相同处境的???有什么办法解决???
这里再简单说下我的大概情况,在主线程的循环体里根据条件(子线程没开启的时候)开启子线程,紧接着判断子线程有没有产生需要的数据,直到产生了需要的数据,关闭子线程,主线程再根据子线程产生的数据执行某个函数,然后主线程循环的时候根据条件(也就是子线程没开启的状体)再次开启子线程。关键问题就是:再次开启子线程的时候,子线程产生的数据(我测试了子线程再次开启的时候根本就没去检测就产生了)和上次卡其的完全一样(哪怕我在再次开启子线程之前销毁了这个数据,而且关闭了子线程)!!!!!
第一次发帖,也不知道有什么违规的地方。难道说按键精灵手机版的多线程是???