查看: 1519|回复: 6

openTreads 使用问题

[复制链接]

该用户从未签到

发表于 2011-4-6 13:55:35 | 显示全部楼层 |阅读模式
本帖最后由 wangxiao358 于 2011-4-6 16:54 编辑

osg 运行中按下某个键,添加一个节点
_root->addChild(osgDB::readNodeFile("dx.IVE"));
这个ive 比较大 动动鼠标窗口就 没有响应 了。我又写了个线程还是卡那哦 各位帮我看看哈 。

class TestThread : public OpenThreads::Thread
{
public:
TestThread(osg::Group* root) : _done(false), _count(0),_root(root) {}
~TestThread() { cancel(); }
void block() { _operator.block(); }
virtual int cancel()
{
  _operator.release();
  _done = true;
  while( isRunning() )
   OpenThreads::Thread::YieldCurrentThread();
  return 0;
}
virtual void run()
{
  _root->addChild(osgDB::readNodeFile("[url=]dx.IVE[/url]"));

  _operator.release();
  _operator.reset();
  _operator.block();

}
protected:
bool _done;
unsigned long _count;
OpenThreads::Block _operator;
osg::Group* _root;
};
//事件响应
class InsertModel : public osgGA::GUIEventHandler
{
public:
InsertModel(){}
~InsertModel(void){}
virtual bool handle(const osgGA::GUIEventAdapter& ea,osgGA::GUIActionAdapter& aa)
{
  switch(ea.getEventType())
  {
  case(osgGA::GUIEventAdapter::KEYDOWN):
   {
    osgViewer::Viewer* viewer = dynamic_cast<osgViewer::Viewer*>(&aa);
    if (!viewer)
    {
     return false;
    }
    osg::Group* root = dynamic_cast<osg::Group*>(viewer->getSceneData());
    if(!root) return false;
    TestThread ttread(root);
    ttread.start();
    ttread.block();
   }
   return false;
  default:
   return false;
  }
}
};

该用户从未签到

发表于 2011-4-6 21:50:18 | 显示全部楼层
为啥操作线程啊,你想干啥呢?

该用户从未签到

发表于 2011-4-7 08:55:20 | 显示全部楼层
您是否检查过,卡死是因为加载的缘故还是浏览的缘故

该用户从未签到

 楼主| 发表于 2011-4-7 11:58:58 | 显示全部楼层
我就是想在 osg运行的中,某个事件响应的时候 加载 模型啊。模型大了 。一直 在读模型,就卡那了。要等读完模型 渲染窗口 才 可以正常渲染。

我线程 哪写错了吗?

该用户从未签到

发表于 2011-4-7 12:57:50 | 显示全部楼层
您的作法等于是阻塞主进程,等待线程中的加载过程完成后再释放——这与直接在主进程中读取文件没有什么区别。我想您可以参考osgtext例子中的UpdateTextOperation,了解一下编写一个简单的独立加载线程的作法

该用户从未签到

发表于 2011-4-7 15:26:00 | 显示全部楼层
这完全不用操作线程啊,你回调里加模型就好了

对于模型巨大的问题,可以PageLod,分层分页

该用户从未签到

 楼主| 发表于 2011-4-8 09:22:40 | 显示全部楼层
好的。谢谢 两位。。我在认真看看。。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

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

联系我们

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