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 阅读(139) 评论(0)  编辑 收藏 引用 所属分类: perl



标题  
姓名  
主页
验证码 *
内容(提交失败后,可以通过“恢复上次提交”恢复刚刚提交的内容)
 
  登录  使用高级评论  新用户注册  返回页首  恢复上次提交      
[使用Ctrl+Enter键可以直接提交]
 
相关链接:



<2008年12月>
30123456
78910111213
14151617181920
21222324252627
28293031123
45678910

导航

统计

常用链接

留言簿(3)

随笔分类(99)

随笔档案(82)

相册

搜索

最新评论

阅读排行榜

评论排行榜