void CEventManager::ProcessEvents() { while(!m_cEventList.empty()) { IEvent* pEvent = *m_cEventList.begin(); // Remove from the list now to avoid problems with sorting new events m_cEventList.erase(m_cEventList.begin()); // Make range of listeners for the current event pair<EventIter, EventIter> range; range = m_cListeners.equal_range(pEvent->GetEventID()); for(EventIter cMapIter = range.first; cMapIter != range.second; cMapIter++) { // Call the callback function of each listener listening for this // event //if(cMapIter->second->m_pcListener->GetIsActive()) { cMapIter->second->m_pfCallback(pEvent, cMapIter->second->m_pcListener); } } // clean up the event's memory MMDELEVENT(pEvent); // Unregister any events UnregisterEvents(); } }
HRESULT CManagerEventsTrigger::RegisterEvents(CManagerEvents* pCall) { UnregisterEvents(pCall); Events.push_back(pCall); return S_OK; }
PIEventHandler::~PIEventHandler() { UnregisterEvents(); }