gyn

Win32下的Perl,无用的select,停滞的Tk,结束吧....

对POE事件队列顺序的一次亲身感受

众所周知 POE 的消息触发机制会维护一个事件的队列,我经常会开几个 component ,然后来回 post 或者 call 。一直没有在意, call post 的区别,虽然我是知道这些区别的,但是实际需要用到的时候,这些区别对我而言几乎没有什么意义,所以经常随便用。前两天,因为需要用到网络连接,我决定把一个写得差不多了的 Tk 程序搬到 POE 上。主要的工作一是把变量存在 $_[HEAP] 中,二是将函数改为事件回调。仔细一点的话,一切还是很顺利的,但调试的时候还是出现了一些状况。这个程序差不多是一个在线的文稿系统,在切换文稿的时候,会对为保存信息进行提示,提醒用户保存。但是事情是,对于已保存的文件,在切换的时候,依然会跳出提醒对话框。我怀疑是字体更改标记被修改了,所以对其进行了跟踪,神奇的是在进入保存函数前标记为 0 ,可一出函数永远为 1 。在保存函数中,有一个对字体修改事件的回调,该事件会在设置完字体之后将字体更改标记设置为 1 ,表示已更改。在保存万之后,需要将该标记重置为 0 ,但是这个重置的过程似乎没有起作用。细想之下,才恍然大悟,原来我用了 post 来回调字体设置事件,因此该事件是被放置在事件队列的尾部的,也就是说在保存函数执行完毕之后 POE 才会运行它,那么自然字体更改标记永远会被设置为 0 了。改为 call 之后就一切 OK 了,因为 call 是立即执行该事件的。

posted on 2008-09-18 09:00 gyn_tadao 阅读(421) 评论(0)  编辑 收藏 引用 所属分类: perl

只有注册用户登录后才能发表评论。
<2008年9月>
31123456
78910111213
14151617181920
21222324252627
2829301234
567891011

导航

统计

常用链接

留言簿(14)

随笔分类(126)

随笔档案(108)

相册

搜索

最新评论

阅读排行榜

评论排行榜