Пример #1
0
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);
		}
	}
}