void CPVRManager::ExecutePendingJobs(void) { CSingleLock lock(m_critSectionTriggers); while (m_pendingUpdates.size() > 0) { CJob *job = m_pendingUpdates.at(0); m_pendingUpdates.erase(m_pendingUpdates.begin()); lock.Leave(); job->DoWork(); delete job; lock.Enter(); } m_triggerEvent.Reset(); }
void CJobWorker::Process() { SetPriority( GetMinPriority() ); while (true) { // request an item from our manager (this call is blocking) CJob *job = m_jobManager->GetNextJob(this); if (!job) break; bool success = false; try { success = job->DoWork(); } catch (...) { CLog::Log(LOGERROR, "%s error processing job %s", __FUNCTION__, job->GetType()); } m_jobManager->OnJobComplete(success, job); } }
void CPVRManagerJobQueue::ExecutePendingJobs() { std::vector<CJob *> pendingUpdates; { CSingleLock lock(m_critSection); if (m_bStopped) return; pendingUpdates = std::move(m_pendingUpdates); m_triggerEvent.Reset(); } CJob *job = nullptr; while (!pendingUpdates.empty()) { job = pendingUpdates.front(); pendingUpdates.erase(pendingUpdates.begin()); job->DoWork(); delete job; } }