void SessionManager::DeleteClientSession(ClientSession* client) { //TODO: lock으로 보호할 것 FastSpinlockGuard EnterLock(m_Lock); { mClientList.erase(client->mSocket); } delete client; }
ClientSession* SessionManager::CreateClientSession(SOCKET sock) { ClientSession* client = new ClientSession(sock); //TODO: lock으로 보호할 것 FastSpinlockGuard EnterLock(m_Lock); { mClientList.insert(ClientList::value_type(sock, client)); } return client; }
void CThreadsManager::RunTask( CTaskObject* pTaskObject ) { if (FALSE == EnterLock()) { return; } //float fBusyNum = m_dwBusyNum * 100 / THRESHOLD_VALUE; if ( m_dwBusyNum<<1 >= m_dwPoolSize ) { CreateThreads( THREADS_STEP_INC ); } BOOL32 bFind = FALSE; // 直接从上一次的下一个开始查找 // ++m_iter; // for (; m_iter != m_ThreadMap.end(); ++m_iter) // { // CThreadInfo* pInfo = m_iter->second; // if (FALSE == pInfo->HasTask()) // { // pInfo->SetTask( pTaskObject ); // bFind = TRUE; // break; // } // ++g_FindCount; // } // 如果没有找到,则从头开始找 // if (FALSE == bFind) // { ThreadMap::iterator iter; for (iter = m_ThreadMap.begin(); iter != m_ThreadMap.end(); ++iter) { CThreadInfo* pInfo = iter->second; if (FALSE == pInfo->HasTask()) { pInfo->SetTask( pTaskObject ); break; } ++g_FindCount; } // } LeaveLock(); ++m_dwBusyNum; }
session * session_manager::GetOneInvalidSession() { EnterLock(); std::vector<session *>::iterator it; for(it = m_invalidsession_list.begin();it!=m_invalidsession_list.end();it++) { if(!(*it)->GetInvalidStatus()) { session * psession = (*it); psession->SetInvalidStatus(true); m_invalidsession_list.erase(it); ExitLock(); return psession; } } ExitLock(); return 0; }
void session_manager::AddInvalidSession( session * psession ) { EnterLock(); m_invalidsession_list.push_back(psession); ExitLock(); }