QueueElement *Queue::run_next() { QueueElement* el = NULL; if (!queue[PRIORITY_HIGH].empty()) { el = queue[PRIORITY_HIGH].front(); queue[PRIORITY_HIGH].pop_front(); } else if (!queue[PRIORITY_MEDIUM].empty()) { el = queue[PRIORITY_MEDIUM].front(); queue[PRIORITY_MEDIUM].pop_front(); } else if (!queue[PRIORITY_LOW].empty()) { el = queue[PRIORITY_LOW].front(); queue[PRIORITY_LOW].pop_front(); } else if (!queue[PRIORITY_NONE].empty()) { el = queue[PRIORITY_NONE].front(); queue[PRIORITY_NONE].pop_front(); } if (!el) return NULL; el->Run(); return el; }