本文整理汇总了C++中WorkQueue::nextItem方法的典型用法代码示例。如果您正苦于以下问题:C++ WorkQueue::nextItem方法的具体用法?C++ WorkQueue::nextItem怎么用?C++ WorkQueue::nextItem使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类WorkQueue
的用法示例。
在下文中一共展示了WorkQueue::nextItem方法的1个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: getItem
WorkItem* Scheduler::getItem(uint* jobIDAcceptor)
{
uint tracker;
WorkItem* itemPtr;
WorkQueue* jobs;
//make sure that currentPriority is set properly
if((currentPriority > maxPriority)||(currentPriority < 1))
currentPriority=1;
//check zero priority
jobs = priorityList.at(0);
if(jobs)
{
itemPtr = jobs->nextItem(0,jobIDAcceptor);
if(itemPtr)
return itemPtr;
//try again in case it stopped due to frame limit or end of job list
itemPtr = jobs->nextItem(0,jobIDAcceptor);
if(itemPtr)
return itemPtr;
}
//remember what the current priority is
tracker = currentPriority;
do
{
//get WorkQueue for current priority
jobs = priorityList.at(currentPriority);
//if there is a WorkQueue for that priority get WorkItem
if(jobs)
{
itemPtr = jobs->nextItem(currentPriority,jobIDAcceptor);
if(itemPtr)
return itemPtr;
}
//no work item found for that priority
//increment currentPriority or loop back to 1
if(++currentPriority > maxPriority)
currentPriority=1;
}while(currentPriority != tracker);
//returned to the original priority and could not find a work item
//check the original priority to see if it has any jobs
//it may have reached its time slice and given other Queues a chance
jobs = priorityList.at(tracker);
if(jobs)
itemPtr = jobs->nextItem(tracker,jobIDAcceptor);
if(!itemPtr)
{
//exhausted all other possibilites, check max + 1 priority
jobs = priorityList.at(maxPriority+1);
if(jobs)
itemPtr = jobs->nextItem(maxPriority+1,jobIDAcceptor);
if(!itemPtr)
itemPtr = jobs->nextItem(maxPriority+1,jobIDAcceptor); //try again in case of frame limit
}
return itemPtr;
}