osgearth加载请求节点优化方案

来源:互联网 发布:java web方面的书籍 编辑:程序博客网 时间:2024/04/25 13:46

背景: pagelod请求一个node的图片是单线程,为了优化网络请求加载速度

方法:

1. 可以设置viewer->getDatabasePager()->setUpThreads(10,8);  设置数据分页管理调度线程数,这里设置是总计10个线程,http网络处理是8个线程,同时可以有8个线程从pagelist取出要加载的requestdata;

2. 加载一个父节点下的4个子节点是使用一个线程,这里也可以分配4个线程,每个线程处理一个节点的图片;

我的方案是在SingleKeyNodeFactory::createNode里面加载4个子节点是做了如下处理:

 for(unsigned q=0; q<4; ++q)
    {
        TileKey child = key.createChildKey(q);
        //_modelFactory->createTileModel( child, _frame, model[q] );
TestTileModelThread *p = new TestTileModelThread(q, this, child, model[q]);
DatabaseThreadList.push_back(p);
p->startThread();
    }


---------------------------           TestTileModelThread类实现如下           ----------------------------------------
SingleKeyNodeFactory::TestTileModelThread::TestTileModelThread(int num, osg::ref_ptr<SingleKeyNodeFactory> nodefactory, const TileKey &key, osg::ref_ptr<TileModel> out_model){
m_nodefactory = nodefactory;
m_TileKey = key;
m_model = out_model;
m_q = num;
}
int SingleKeyNodeFactory::TestTileModelThread::cancel(){
OpenThreads::Thread::YieldCurrentThread();
return 0;


}


void SingleKeyNodeFactory::TestTileModelThread::run(){
//double start = GetTickCount();
m_nodefactory->_modelFactory->createTileModel(m_TileKey, m_nodefactory->_frame, m_model);
m_nodefactory->_model[m_q] = m_model.release();
//double end = GetTickCount();
//printf("%s::%d:: key:%s,  time:: %lf, pthreadID: %0x \n", __FILE__, __LINE__, m_TileKey.str().c_str(), end - start, getThreadId());
}

1 0
原创粉丝点击