void TaskQueue::update(float maxTime) { PerformanceTimer timer; timer.start(); TaskRequest *req; resultQLock.enter(); while (!resultQ.empty() && (maxTime==0 || timer.getSplitTime() < maxTime)) { req=resultQ.back(); resultQ.pop_back(); --numResults; --sm_iTotalNumResults; resultQLock.leave(); if (req->mainThreadFinish()) { req->mainThreadOnComplete(); delete req; } else { // if Finish() returns false, more worker thread processing is needed asyncRequest(req); } resultQLock.enter(); } resultQLock.leave(); }
void updateQueue ( BuildQueue * queue, PerformanceTimer const & timer, float timeBudget ) { BuildQueue::iterator it = queue->begin(); while(it != queue->end()) { if(timer.getSplitTime() >= timeBudget) return; ServerPathBuilder * currentBuilder = (*it); currentBuilder->update(); BuildQueue::iterator old = it; it++; if(currentBuilder->buildDone()) { currentBuilder->setQueued(false); queue->erase(old); } } }