int ShmMgr::getStatSem() { vector<SEMINFO>::iterator it; int iRtn = 0; int ii=0; CSemaphore *poInfoDataLock = new CSemaphore(); char sTemp[32]={0}; for (it = m_vSEMInfo.begin();it != m_vSEMInfo.end();it ++) { memset(sTemp,0,sizeof(sTemp)); sprintf (sTemp, "%ld", it->m_lIpcKey); poInfoDataLock->getSem (sTemp, 1, 1); if(poInfoDataLock->P(false)) { poInfoDataLock->V(); it->m_iState=0; } else{ it->m_iState=1; } } delete poInfoDataLock ; return m_vSEMInfo.size(); }
bool creatSem(vector<SEMINFO> m_vSEMInfo) { CSemaphore * pSemLock =0; char sTemp[32]={0}; int iSize=m_vSEMInfo.size(); for(int i=0;i<iSize;i++) { pSemLock = new CSemaphore(); if(!pSemLock) return false ; memset(sTemp,0,sizeof(sTemp)); sprintf (sTemp, "%d", m_vSEMInfo[i].m_lIpcKey); if(!pSemLock->getSem (sTemp, 1, 1)) LOG.log(MBC_SEMP_CREATE_FAIL,LOG_LEVEL_FATAL, LOG_TYPE_SYSTEM,"创建信号量失败,请检查key值[%s]!",sTemp); delete pSemLock ; pSemLock =0; } }