如何让一个coroutine异常终止
有关coroutine的函数:create , wrap, yield, resume,status,running
怎么就没有一个函数,可以从外部强制某个正在挂起的coroutine静悄悄地消亡呢。
这个很重要,当然可以按那个重载的快捷键,也可以执行DoCommand("ReloadScriptFile"),但这样做,影响面大,且不好控制。 如果楼主在研究wait在mush中的实现,可以参考我的脚本环境。
1、线程法wait,不太方便(我也不清楚,用过几次,经常出现楼主的问题。)
2、时间timer法,受到网速问题影响很大。
3、自定义触发方式,目前我采用的方法。还算稳定。
如果想单存的关闭触发群,也有帖子参考。
至于强行关闭线程,估计得调用api吧?不懂,关注。。。
[ 本帖最后由 littleknife 于 2010-12-8 04:11 PM 编辑 ] 楼上修正了wait的bug?我学习一下 wait我由于没有深入研究线程,所以放弃了采用线程方法解决wait的问题。
目前的方法是自定义触发的方式解决。
楼主说的wait,bug指的是什么意思?是mush自己提供的wait.lua吗?(我没用它,所以不了解。) litteknife,你的自定义触发方式,是个什么思想?学习一下 wait.lua,确实存在bug,当一个mc只打开一个窗口时没有问题,打开多个窗口就会发生线程丢失的情况 其实也不是我的发明,是前辈们的杰作。核心思想就是用set命令自己设计触发,比如wait
激活:set no_more walkgo,"设置环境变量....";当我见到这个触发再进行动作。比如行走,比如暂停。再次见到这个触发,调用函数行走。
wait功能,就是用DoAfterSpecial(waittime,"set no_more walkgo",12)
[ 本帖最后由 littleknife 于 2010-12-8 04:18 PM 编辑 ] 如果可以理解成普通的象zmud式的触发的话,行是可行的,zmud rbt也是采用这种方式。只是这样会丧失协程wait伟大的功能。有了wait,事件的处理才会如行云流水,才能保证功能模块的多聚合少耦合,使得复杂的事件处理变得简单封闭和独立。我宁愿一个mc只打开一个窗口,也不愿意抛弃wait啊 原帖由 myu 于 2010-12-8 04:23 PM 发表 http://pkuxkx.com/forum/images/common/back.gif
如果可以理解成普通的象zmud式的触发的话,行是可行的,zmud rbt也是采用这种方式。只是这样会丧失协程wait伟大的功能。有了wait,事件的处理才会如行云流水,才能保证功能模块的多聚合少耦合,使得复杂的事件处理变 ...
这种自定义触发方式完全可以用于zmud(当然由于zmud的wait使得它被忽视了。)
需深入剖析wait的作用:zmud中的wait,无非是1、一个命令后wait然后在另一个命令罢了。2、自写程序中对各个动作的间断(比如ask后的wait 等等。)
这样理解后即可发现,mush完全可以胜任。1。wait后执行的命令完全可以用自定义触发后在执行(比如npc是否在场等等)。2、自定义动作后的间断,由于mush的强大脚本支持,完全可以解决,当然可以自定义触发解决此类问题。 zmud式的触发,缺陷就是使各功能模块纠缠不清,缺乏独立性和封闭性。当机器人很复杂时,容易出BUG,不便于维护,不便于扩充。