void CBackgroundInfoLoader::Load(CFileItemList& items) { StopThread(); if (items.Size() == 0) return; EnterCriticalSection(m_lock); for (int nItem=0; nItem < items.Size(); nItem++) m_vecItems.push_back(items[nItem]); m_pVecItems = &items; m_bStop = false; m_bStartCalled = false; int nThreads = m_nRequestedThreads; if (nThreads == -1) nThreads = (m_vecItems.size() / (ITEMS_PER_THREAD+1)) + 1; if (nThreads > g_advancedSettings.m_bgInfoLoaderMaxThreads) nThreads = g_advancedSettings.m_bgInfoLoaderMaxThreads; if (items.IsSmb() && nThreads > MAX_SMB_THREAD_COUNT) nThreads = MAX_SMB_THREAD_COUNT; m_nActiveThreads = nThreads; CLog::Log(LOGDEBUG,"CBackgroundInfoLoader::Load - creating %d threads",nThreads); for (int i=0; i < nThreads; i++) { CThread *pThread = new CThread(this); pThread->SetName("Background Loader"); m_workers.push_back(pThread); pThread->Create(); #ifndef _LINUX pThread->SetPriority(THREAD_PRIORITY_BELOW_NORMAL); #endif } LeaveCriticalSection(m_lock); }