bool NFCHeartBeatManager::Execute() { NF_SHARE_PTR<NFCHeartBeatElement> pElement = mHeartBeatElementMapEx.First(); while (pElement.get()) { //millisecond NFINT64 nTime = NFTime::GetNowTimeMille(); if (nTime > pElement->nNextTriggerTime && pElement->nCount > 0) { pElement->nCount--; pElement->DoHeartBeatEvent(); if (pElement->nCount <= 0) { //等待删除 mRemoveListEx.Add(pElement->strBeatName); } else { //Do Event pElement->nNextTriggerTime = nTime + NFINT64(pElement->fBeatTime * 1000); } } pElement = mHeartBeatElementMapEx.Next(); } //删除所有过时心跳 std::string strHeartBeatName; bool bRet = mRemoveListEx.First(strHeartBeatName); while (bRet) { mHeartBeatElementMapEx.RemoveElement(strHeartBeatName); bRet = mRemoveListEx.Next(strHeartBeatName); } mRemoveListEx.ClearAll(); ////////////////////////////////////////////////////////////////////////// //添加新心跳也是延时添加的 for (std::list<NFCHeartBeatElement>::iterator iter = mAddListEx.begin(); iter != mAddListEx.end(); ++iter) { if (NULL == mHeartBeatElementMapEx.GetElement(iter->strBeatName)) { NF_SHARE_PTR<NFCHeartBeatElement> pHeartBeatEx(NF_NEW NFCHeartBeatElement()); *pHeartBeatEx = *iter; mHeartBeatElementMapEx.AddElement(pHeartBeatEx->strBeatName, pHeartBeatEx); } } mAddListEx.clear(); return true; }
bool NFCHeartBeatManager::Execute(const float fLastTime, const float fAllTime) { NF_SHARE_PTR<NFCHeartBeatElement> pElement = mHeartBeatElementMapEx.First(); while (pElement.get()) { int nCount = pElement->nCount; float fTime = pElement->fTime; if (fTime > 0.000000f) { fTime -= fLastTime; } if (fTime <= 0.001f) { nCount--; } else { pElement->fTime = fTime; } if (nCount <= 0) { //Do Event pElement->DoHeartBeatEvent(); //等待删除 mRemoveListEx.Add(pElement->strBeatName); } else { if (pElement->nCount != nCount) { pElement->nCount = nCount; //Do Event pElement->DoHeartBeatEvent(); pElement->fTime = pElement->fBeatTime; } } pElement = mHeartBeatElementMapEx.Next(); } //删除所有过时心跳 std::string strHeartBeatName; bool bRet = mRemoveListEx.First(strHeartBeatName); while (bRet) { mHeartBeatElementMapEx.RemoveElement(strHeartBeatName); bRet = mRemoveListEx.Next(strHeartBeatName); } mRemoveListEx.ClearAll(); ////////////////////////////////////////////////////////////////////////// //添加新心跳也是延时添加的 for (std::list<NFCHeartBeatElement>::iterator iter = mAddListEx.begin(); iter != mAddListEx.end(); ++iter) { if (NULL == mHeartBeatElementMapEx.GetElement(iter->strBeatName)) { NF_SHARE_PTR<NFCHeartBeatElement> pHeartBeatEx(NF_NEW NFCHeartBeatElement()); *pHeartBeatEx = *iter; mHeartBeatElementMapEx.AddElement(pHeartBeatEx->strBeatName, pHeartBeatEx); } } mAddListEx.clear(); return true; }