查看: 1773|回复: 4

请问DeleteHandler如何设置释放帧数?

[复制链接]

该用户从未签到

发表于 2010-7-9 11:12:20 | 显示全部楼层 |阅读模式
Array的《最长的一帧》里提到DeleteHandler和它的用法。

   DeleteHandler有一个重要的参数_numFramesToRetainObjects,它的意义是,垃
圾对象被收集之后,再经过多少帧(默认设置是 2) ,方予以释放。如果我想自行设置这个属性该怎么做?
    DeleteHandler是Referenced类的一个成员。那么对于一个节点树而言。我是应该获取每一个节点的DeleteHandler的setNumFramesToRetainObjects函数,还是仅需要设置父节点?
我使用
pager->getDeleteHandler()->setFrameNumber(1000);
之后程序会出现异常,无法正常启动。

该用户从未签到

发表于 2010-7-9 17:13:09 | 显示全部楼层
getDeleteHandler是一个静态变量,您可以尝试设置setNumFramesToRetainObjects()。但是不要设置setFrameNumber,这个是系统每帧自动设置的

该用户从未签到

发表于 2010-7-9 19:38:12 | 显示全部楼层
给你一小段使用代码:

  1.         if (osg::Referenced::getDeleteHandler())
  2.         {
  3.                         osg::Referenced::getDeleteHandler()->setNumFramesToRetainObjects(0);
  4.                 osg::Referenced::getDeleteHandler()->flushAll();
  5.         }

复制代码

该用户从未签到

 楼主| 发表于 2010-7-9 23:41:50 | 显示全部楼层
多谢二位耐心回复。
真是抱歉,我贴上来的代码笔误了。应该是setNumFramesToRetainObjects。
我代码里检查:
if (osg::Referenced::getDeleteHandler())
        {
}  时发现没有默认的DeleteHandler存在。自己new 一个以后,
如果 page->getDeleteHandler()->setNumFramesToRetainObjects(1000);
在程序退出的时候在osgearth的unregisterMapNode函数中出现异常。
如果page->getDeleteHandler()->setNumFramesToRetainObjects(0);就没有问题。不使用DeleteHandler也没有问题。
太晚了,明天再想。
多谢二位!

该用户从未签到

发表于 2010-7-12 08:27:13 | 显示全部楼层
自己new一个没有任何意义的,可以参考这段代码。这是Viewer类初始化的时候自动执行的:
  1. if (!osg::Referenced::getDeleteHandler())
  2.     osg::Referenced::setDeleteHandler(new osg:: DeleteHandler(2));
  3.         else
  4.     osg::Referenced::getDeleteHandler()->setNumFramesToRetainObjects(2);
复制代码
您需要登录后才可以回帖 登录 | 注册

本版积分规则

OSG中国官方论坛-有您OSG在中国才更好

网站简介:osgChina是国内首个三维相关技术开源社区,旨在为国内更多的技术开发人员提供最前沿的技术资讯,为更多的三维从业者提供一个学习、交流的技术平台。

联系我们

  • 工作时间:09:00--18:00
  • 反馈邮箱:1315785073@qq.com
快速回复 返回顶部 返回列表