Example #1
0
//!
//!
void CResManager::Update()
{
	// В начале нужно удалить ресурс из очереди, т.к. мы можем рекурсивно
	// вернуться сюда при выполнении FinalizeRes
	// В результате, ресурс может быть финализирован несколько раз (deadlock)

	CVector <TResource *> resLocalCopy;
	uint nRes;

	m_ReadySection.Enter();

		nRes = m_ResReady.GetCount();

		while ( nRes-- )
		{
			resLocalCopy.AddToTail( m_ResReady.GetItem( nRes ) );
		}

		m_ResReady.Clear();

	m_ReadySection.Leave();

	//-----------

	nRes = resLocalCopy.GetCount();

	for ( uint n = 0; n < nRes; ++n )
	{
		TResource * pRes = resLocalCopy[ n ];		
		pRes->pCreator->FinalizeRes( pRes );
		//DEL( pRes );
	}

	resLocalCopy.Delete();
}