void XBPython::WaitForEvent(CEvent& hEvent, unsigned int timeout) { // wait for either this event our our global event XbmcThreads::CEventGroup eventGroup(&hEvent, &m_globalEvent, NULL); eventGroup.wait(timeout); m_globalEvent.Reset(); }
void CScrobbler::Process() { CLog::Log(LOGDEBUG, "%s: Thread started.", m_strLogPrefix.c_str()); if (!m_pHttp) { // Hack since CFileCurl isn't threadsafe if (!(m_pHttp = new XFILE::CFileCurl)) return; } XbmcThreads::CEventGroup eventGroup(&m_hEvent, getStopEvent(), NULL); while (!m_bStop) { eventGroup.wait(); if (m_bStop) break; if (m_strSessionID.IsEmpty()) { time_t now = time(NULL); // We need to handshake. if (m_bBanned || m_bBadAuth || ((now - m_lastFailedHandshake) < m_failedHandshakeDelay)) continue; if (!DoHandshake(now)) continue; } int action = 0; { CSingleLock lock(m_actionLock); action = m_action; m_action = 0; } if (action == SCROBBLER_ACTION_NOWPLAYING) DoNowPlayingNotification(); else if (action == SCROBBLER_ACTION_SUBMIT) { m_bSubmitting = true; DoSubmission(); m_bSubmitting = false; } } delete m_pHttp; // More of aforementioned hack m_pHttp = NULL; CLog::Log(LOGDEBUG, "%s: Thread ended.", m_strLogPrefix.c_str()); }