osgEarth的Rex引擎原理分析(三十二)请求四个状态的含义(IDLE RUNNING MERGING FINISHED)

本文详细分析了osgEarth的Rex引擎中请求的四个状态:IDLE, RUNNING, MERGING, FINISHED。在请求处理过程中,它们分别代表了请求的不同阶段,例如初始化、合并、完成等。同时,文章还探讨了状态变化的条件,如何时从请求列表中删除已完成的请求。" 124772912,9130843,正则表达式在登录页面表单验证的应用,"['javascript', '前端开发', '正则表达式', '表单验证', '登录界面']

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

目标:(二十三)中问题75

请求经过PagerLoader加载时初始化为RUNNING

osgEarthDrivers/engine_rex/Loader.cpp
bool
PagerLoader::load(Loader::Request* request, float priority, osg::NodeVisitor& nv)
{
    request->setState(Request::RUNNING);
}

在PagerLoader将请求加入合并队列_mergeQueue时设为MERGING

osgEarthDrivers/engine_rex/Loader.cpp
bool
PagerLoader::addChild(osg::Node* node)
{
                    _mergeQueue.insert( req );
                    req->setState( Request::MERGING );
}

在PagerLoader遍历合并队列,执行完请求的apply()时设置为FINISHED

osgEarthDrivers/engine_rex/Loader.cpp
void
PagerLoader::traverse(osg::NodeVisitor& nv)
{
            for(count=0; count < _mergesPerFrame && !_mergeQueue.empty(); ++count)
            {
                Request* req = _mergeQueue.begin()->get();
                if ( req && req->_lastTick >= _checkpoint )
                {
                    OE_START_TIMER(req_apply);
                    req->apply( getFrameStamp() );
                    double s = OE_STOP_TIMER(req_apply);

                    req->setState(Request::FINISHED);
                }
            }
}

PagerLoader在遍历请求时,如果存在以下情况则将请求状态会设为IDLE,并从请求列表中删除该请求。(1)请求的状态已经设置为FINISHED(为什么不在设置FINISHED状态时直接删除请求呢);(2)超过两帧都没有将请求放入合并队列;(3)超过1800帧都没有从合并队列里处理完。

osgEarthDrivers/engine_rex/Loader.cpp
void
PagerLoader::traverse(osg::NodeVisitor& nv)
{
                // Deal with completed requests:
                if ( req->isFinished() )
                {
                    //OE_INFO << LC << req->getName() << "(" << i->second->getUID() << ") finished." << std::endl; 
                    req->setState( Request::IDLE );
                    if ( REPORT
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值