//! //! 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(); }