Example #1
0
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);
}