void CachingReader::run() { TrackPointer pLoadTrack; m_newTrackMutex.lock(); if (m_newTrack) { pLoadTrack = m_newTrack; m_newTrack = TrackPointer(); } m_newTrackMutex.unlock(); if (pLoadTrack) { loadTrack(pLoadTrack); } else { // Read the requested chunks. ChunkReadRequest request; ReaderStatusUpdate status; while (m_chunkReadRequestFIFO.read(&request, 1) == 1) { processChunkReadRequest(&request, &status); m_readerStatusFIFO.writeBlocking(&status, 1); } } // Notify the EngineWorkerScheduler that the work we did is done. setActive(false); }
void CachingReaderWorker::run() { unsigned static id = 0; //the id of this thread, for debugging purposes QThread::currentThread()->setObjectName(QString("CachingReaderWorker %1").arg(++id)); TrackPointer pLoadTrack; ChunkReadRequest request; ReaderStatusUpdate status; Event::start(m_tag); while (!load_atomic(m_stop)) { if (m_newTrack) { m_newTrackMutex.lock(); pLoadTrack = m_newTrack; m_newTrack = TrackPointer(); m_newTrackMutex.unlock(); loadTrack(pLoadTrack); } else if (m_pChunkReadRequestFIFO->read(&request, 1) == 1) { // Read the requested chunks. processChunkReadRequest(&request, &status); m_pReaderStatusFIFO->writeBlocking(&status, 1); } else { Event::end(m_tag); m_semaRun.acquire(); Event::start(m_tag); } } }
void CachingReaderWorker::run() { TrackPointer pLoadTrack; ChunkReadRequest request; ReaderStatusUpdate status; while (!deref(m_stop)) { if (m_newTrack) { m_newTrackMutex.lock(); pLoadTrack = m_newTrack; m_newTrack = TrackPointer(); m_newTrackMutex.unlock(); loadTrack(pLoadTrack); } else if (m_pChunkReadRequestFIFO->read(&request, 1) == 1) { // Read the requested chunks. processChunkReadRequest(&request, &status); m_pReaderStatusFIFO->writeBlocking(&status, 1); } else { m_semaRun.acquire(); } } }