ULONG WINAPI CDirect3DCubeTexture8::Release(THIS) { ComptrGurad<IDirect3DCubeTexture9> gurad(pCubeTexture9); ULONG count = pCubeTexture9->Release(); if (1 == count) { delete this; } return count - 1; }
ULONG WINAPI CDirect3DDevice8::Release(THIS) { ComptrGurad<IDirect3DDevice9> gurad(pDevice9); DWORD count = pDevice9->Release(); if (1 == count) { delete this; } return count - 1; }
void ThreadManager::submit( Runable* job ) { Thread* thread = NULL; { ScopeGuard gurad(&mutex); thread = get_idle_thread(); } thread->set_job( job ); }
// 移除数据 bool CArcossCache::Remove( int id, char color, char *vechile ) { share::Guard gurad( _mutex ) ; ArcossData *p = RemoveIndex( id, color, vechile ) ; if ( p == NULL ) { return false ; } CMapArcoss::iterator it = _mapArcoss.find( id ) ; if ( it == _mapArcoss.end() ) { return false ; } ArcossHeader *header = it->second ; if ( header->_tail == p && header->_head == p ) { // 只有一个元素 _mapArcoss.erase( it ) ; deletefile( id ) ; delete header ; } else { // 有多个元素的情况 if ( p == header->_head ){ // 位于头部数据 header->_head = p->_next ; if ( p->_next != NULL ) { p->_next->_pre = NULL ; } } else if ( p == header->_tail ){ // 位于尾部的情况 header->_tail = p->_pre ; if ( p->_pre != NULL ) { p->_pre->_next = NULL ; } } else { // 位于中间的情况 p->_pre->_next = p->_next ; p->_next->_pre = p->_pre ; } header->_size = header->_size - 1 ; } delete p ; return true ; }