コード例 #1
0
ファイル: ShowMemData.cpp プロジェクト: xkmld419/crawl
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();
}	
コード例 #2
0
ファイル: CSemMgr.cpp プロジェクト: xkmld419/crawl
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;
     }
}