ijk123's Blog

Happy coding

反复创建osgViewer,消息响应延迟的问题

ijk123 posted @ 2014年6月24日 14:57 in 未分类 , 731 阅读
之前出现过在ActiveX控件里,反复刷新IE的情况下,有的osg控件可以正常的工作,而有的则会出现再次刷新后,控件不再响应鼠标和键盘事件的问题。
因为把IE关掉再重新打开的话,这个问题就没有了,所以一直以为是IE的问题,一直没有管。
 
这两天在写一个程序原型的时候,需要在Qt的程序里,反复的创建并切换Viewer,这时问题又出现了:
第一个创建出来的Viewer工作正常,当销毁这个再创建出另一个后,就出现鼠标和键盘事件响应延迟的问题,延迟的时间很长,大概5秒以上。
 
翻出来之前网上下的osg例子程序,也改成多次创建viewer,结果跑起来却没有问题!
怪了,肯定是自己哪里删代码的时候改坏了,于是经过一个下午的代码对比后,发现了问题所在。
 
osgViewer::ViewBase::realize()
 
对,就是这个函数,对比后发现我的代码里没有这个函数的调用,加上后,一切正常了。
 
不过值得注意的是,我把例子里的realize()删掉后,它仍然能正常工作。我去翻了下这个函数的代码,发现确实是做了很多工作,不过在frame()函数里是有检查isRealized()的,如果没有实例化过的话,frame()函数是会调用realize()进行一次实例化的。
 
由于我自己的代码暂时没有debug的库,编一个出来估计要差不多一个小时,所以暂时偷个懒在这里记录一下,以后有时间的话还是要再过一次osg的框架代码的。

 


登录 *


loading captcha image...
(输入验证码)
or Ctrl+Enter