CG橙子精彩导航: CG橙子搜索引擎 | 博客 | 动画视频
广告|项目|培训|竞价排名  
86CG > CG教程 > 虚拟现实 > Multigen > 基于MFC的Vega线程中的问题

基于MFC的Vega线程中的问题

类型:整理 | 来自:86CG | 时间:2007-11-29 |  点击:

  Vega应用程序可以通过应用定义文件(.ADF)来载入三维场景模型。在实际开发的应用中,当用户打开应用程序时,在不退出该应用的前提下进行三维场景切换是十分必要的。从Vega的应用程序框架中我们可以看出,框架主要由它的配置三步曲和渲染主循环构成。当用户已经打开一个场景后需要切换到另一个场景时,程序正处于渲染主循环中,本应只需用配置三步曲中的第二步导入另一个.ADF文件再进行第三步设置或三步曲皆重新作过再进入渲染主循环即可,遗憾的是由于某些未知的具体原因(并非程序结构的实现技术问题)而行不通。

  由于Vega系统提供的是链接库形式的函数调用,没有源码,从设计软件系统的角度来看,这种为了保证整个系统的完整性,系统外部接口的一致性,系统内部更新的独立性以及系统内部实现技术的保密性等而进行的封装是完全有必要的。然而在保证以上特性的前提下,给开发用户提供必要的诊错手段也是必不可少的。在这方面Windows的API调用以及MFC类库等做的十分好,它们在许多操作的结果通常都返回一个值,以告诉用户是否成功或是失败还是出现异常,更完善的是Windows系统提供了一个全局的函数调用GetLastError(  )操作来获取每一步操作后的结果是否成功。从设计模式的观点来看,这是使用了单件模式(Singleton),它使得在程序的任何位置都能直接访问到该函数。而在Vega系统里却没有提供如此完善的诊错手段,它的大部分操作没有返回结果,因此用户只能认为此次操作成功了。然而一旦程序出现了问题,用户将会不知所措。而且,由于Vega将类的接口定义都“封装”起来了,用户所能获取的仅仅是一个可用来充当句柄的类的指针而已,一些与面向对象有关的继承、多态、消息操作[4]等皆无明显体现,这大概与Vega旨在最大限度的兼容现有程序的移植目标有关吧。

  若在Vega线程未退出时进行重新配置将导致失败,那么在切换场景时让正在运行的线程自然终止而重新开启另一个线程应该不会有错了。然而结果是令人沮丧的,出现一个地址访问保护的错误。导致这种错误的主要原因是引用的无效的指针,该指针所指的空间要么是分配空间后已被释放,要么是指向其它线程的局部地址空间。

  为什么会出现这种错误呢?在第二次初始化Vega系统时,前一个Vega线程不是已经终止了吗?所以一定存在遗留问题。经调试跟踪显示,问题就出在Vega配置三步曲的第一步vgInitWinSys()上,该函数的作用主要是初始化Vega系统并创建共享内存以及信号量等,除此之外它还在后台做了一件重要的事情——就是又开启了一个Vega窗口子线程,该子线程根据传送的窗口句柄参数创建一个与该句柄对应窗口一相同大小的窗口二,并将它蒙(覆盖)在窗口一上,这是Vega开发指南上未有提及的,这样Vega系统的渲染窗口就可以嵌入到基于MFC的视口上了。该子线程的创建是必不可少的,但却没有终止它的办法——它是Vega函数内部创建的。又因为线程隶属于进程,只有进程结束了,所有的线程才全部退出。所以即使创建它的父线程已死,它却还“活”着,不过因此而保留了一些无用的参数如无效的指针等。而更糟的是当第二个线程启动时,函数vgInitWinSys()却不再启动新的子线程而是继续保留原来没死的窗口线程,因此错误的发生是注定的。

 

(完)
可打印版本 | 文章评论 | 我来纠错

|网友评论

    笔名:

    内容:

        

    |热点关注

    新歌 白狐 左边 拉拉爱 校园网 自由飞翔 感恩的心 边做边爱 为你写诗 北京欢迎你 范跑跑之歌 遇上你是我的缘 坏女人 N81 星星 火花 放生 不值得 手机网 分手那天 忘不掉的伤 电子杂志 网上展会 天使 城府 爱死了昨天 BT电影下载 N70 最后一次的温柔 小小 承诺 有没有人告诉你 N73 光荣 葬爱 大海 日不落 有缘人 躲避的爱 香水有毒 一定要爱你 求佛 爱在离别时 北极星的眼泪 假如 flash 歌曲 启示录 那滋味 独家记忆 放手去爱 丁香花 会呼吸的痛 音乐排行榜 爱上别人的人 对不起我爱你 N70 6300 会有天使替我爱你 DJ 爱上你是我的错 不要在我寂寞的时候说爱我 爱上你是一个错 爱你爱的好疲惫 怎么会狠心伤害我 MP3 音乐手机 拍照手机 智能手机 CDMA手机 怒放的生命 老人与海 等爱的玫瑰 爱情里没有谁对谁错 做你的爱人 感动天感动地 做我老婆好不好 你的承诺 王子 心碎 舍不得 摇啊摇 泪的告白 寂寞才说爱 擦肩而过 阿里阿里 中国基金网 新不了情 小情歌 离歌

    关于我们 - 版权隐私 - 友情链接 - 广告服务 - 项目合作 - 网站地图 - 联系方式

    ©Copyright by 86CG.COM, 2006-2008. All rights reserved 京ICP备06059503号