北大侠客行MUD论坛

 找回密码
 注册
搜索
热搜: 新手 wiki 升级
查看: 6747|回复: 10

困扰已久的问题,终于明白了

[复制链接]
发表于 2010-12-12 12:41:50 | 显示全部楼层 |阅读模式
为什么一个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 编辑 ]
北大侠客行Mud(pkuxkx.net),最好的中文Mud游戏!
 楼主| 发表于 2010-12-12 18:04:16 | 显示全部楼层
跳跳熊有什么高见吗?
北大侠客行Mud(pkuxkx.net),最好的中文Mud游戏!
发表于 2010-12-12 19:22:18 | 显示全部楼层
避免ReloadScriptFile 试试看
北大侠客行Mud(pkuxkx.net),最好的中文Mud游戏!
 楼主| 发表于 2010-12-12 19:38:51 | 显示全部楼层
不大好避免,因为总有非预期的事件发生
北大侠客行Mud(pkuxkx.net),最好的中文Mud游戏!
发表于 2010-12-13 12:10:00 | 显示全部楼层
这有啥好困扰的
开两个mushclient呗
北大侠客行Mud(pkuxkx.net),最好的中文Mud游戏!
 楼主| 发表于 2010-12-14 09:24:13 | 显示全部楼层

回复 undefined 的帖子

北大侠客行Mud(pkuxkx.net),最好的中文Mud游戏!
发表于 2010-12-14 09:40:45 | 显示全部楼层
记得有指定发送到哪个world的?
北大侠客行Mud(pkuxkx.net),最好的中文Mud游戏!
 楼主| 发表于 2010-12-14 09:44:39 | 显示全部楼层
原帖由 jarlyyn 于 2010-12-14 09:40 AM 发表
记得有指定发送到哪个world的?


赶紧的,查查看。
北大侠客行Mud(pkuxkx.net),最好的中文Mud游戏!
发表于 2010-12-14 09:45:36 | 显示全部楼层
这个肯定有的。help里也应该有。
不过现在在linux下,查hlp不方便
北大侠客行Mud(pkuxkx.net),最好的中文Mud游戏!
 楼主| 发表于 2011-1-6 11:24:17 | 显示全部楼层
原帖由 jarlyyn 于 2010-12-14 09:45 AM 发表
这个肯定有的。help里也应该有。
不过现在在linux下,查hlp不方便


这个真没有
北大侠客行Mud(pkuxkx.net),最好的中文Mud游戏!
您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|手机版|小黑屋|北大侠客行MUD ( 京ICP备16065414号-1 )

GMT+8, 2024-11-24 05:52 PM , Processed in 0.012265 second(s), 14 queries .

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

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