游戏开发论坛

 找回密码
 立即注册
搜索
123
返回列表 发新帖
楼主: instemast

[茶余饭后]聊聊你怎么解决“间接递归”(新手慎入)

[复制链接]

362

主题

3023

帖子

3553

积分

论坛元老

Rank: 8Rank: 8

积分
3553
 楼主| 发表于 2008-3-25 23:33:00 | 显示全部楼层

Re:[茶余饭后]聊聊你怎么解决“间接递归”(新手慎入)

恩,可以说,稍微解决了一点吧。

实际上事件不应该用CallBack。
我说的意思,不是“CallBackFunction”这种语法,
用Interface也好,Callback也好,都是一样的。

昨晚把CEvent重新设计了。。。MFC的消息机制是正确的。
不过仍然使用CallbackFunction这种语法来调用事件处理函数,
但是不是立即调用,而是RaiseEvent的时候把事件放在队列里面,
然后,用户可以在稍后(UI服务类的消息处理完后),
调用PeekEvent,来调用事件处理函数。

如果把UI服务类的消息处理,和用户UI的事件处理,看作是多任务并行的话,
这么做就等于是一个同步,即UI服务的消息处理全部完成后,
再调用用户的事件处理函数。

362

主题

3023

帖子

3553

积分

论坛元老

Rank: 8Rank: 8

积分
3553
 楼主| 发表于 2008-3-25 23:56:00 | 显示全部楼层

Re:[茶余饭后]聊聊你怎么解决“间接递归”(新手慎入)

但也不要误解,我用队列的方式很多人就要误解了,
认为消息处理不能够有bool返回值。

不必担心这个,UI服务类中的确有bool返回值,它是一层层地处理消息的,
但是引发的事件不会立刻调用用户的事件处理函数,而是放在队列里。
然后UI服务消息处理全部完成后,才允许Peek这个事件队列。

如果用双线程的话,这里面就是一个同步问题。

原因很简单,在UI服务类处理完消息之前,决不允许用户破坏UI。

就好比那个“矩阵乘法”的帖子,在所有元素计算完成之前,不允许破坏矩阵。

362

主题

3023

帖子

3553

积分

论坛元老

Rank: 8Rank: 8

积分
3553
 楼主| 发表于 2017-4-18 00:44:05 来自手机 | 显示全部楼层
http://bbs.gameres.com/forum.php?mod=viewthread&tid=663392&mobile=yes
使用simulation模板库进行纯函数式编程
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

作品发布|文章投稿|广告合作|关于本站|游戏开发论坛 ( 闽ICP备17032699号-3 )

GMT+8, 2025-2-24 23:21

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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