困扰已久的问题,终于明白了
为什么一个mushclient打开两个以上窗口,就会发生线程丢失的事情,一直在找原因,终于弄明白了。发生这种情况有两个必要条件
1、使用了timer定时器
2、由定时器,直接或者间接引发了DoCommand("ReloadScriptFile")
当这种情况发生时,这个DoCommand可能并不在本窗口执行,而是在另一个窗口执行了,这就导致另一个窗口脚本重载。
大家可以做个一个实验,用mushclient打开两个窗口,在窗口1的配置中将AltA定义为/print("我是窗口一"),在窗口2的配置中将AltA定义为/print("我是窗口二"),然后在窗口1中建立一个timer,每隔5秒执行一次DoCommand("AltA")。
仔细观察,虽然大部分时间会在窗口1打印“我是窗口一",但偶尔这个DoCommand并没有在窗口1执行,而是跑到窗口2执行,从而打印出“我是窗口2"。
我以前一直以为线程丢失是由于wait引起的,看来完全弄错了,原来真正的bug在这个地方。可是怎么样完美地解决呢?一是不用timer,这显然做不到,二是不用DoCommand,在线程方式下这也非常困难,三个不让timer引发DoCommand,暂时没找到办法,因为间接的引发也不行。
还有一个办法,是全部使用插件,使用插件方式,主窗口的ReloadScriptFile对插件没有影响。但插件的封闭性存在不足,且不利维护。
<有答案了,在11楼>
[ 本帖最后由 myu 于 2011-1-6 11:30 AM 编辑 ] 跳跳熊有什么高见吗? 避免ReloadScriptFile 试试看 不大好避免,因为总有非预期的事件发生 这有啥好困扰的
开两个mushclient呗
回复 undefined 的帖子
ttk_42 记得有指定发送到哪个world的? 原帖由 jarlyyn 于 2010-12-14 09:40 AM 发表 http://www.pkuxkx.com/forum/images/common/back.gif记得有指定发送到哪个world的?
赶紧的,查查看。 这个肯定有的。help里也应该有。
不过现在在linux下,查hlp不方便 原帖由 jarlyyn 于 2010-12-14 09:45 AM 发表 http://www.pkuxkx.com/forum/images/common/back.gif
这个肯定有的。help里也应该有。
不过现在在linux下,查hlp不方便
这个真没有
页:
[1]
2