GHOST_IEvent* GHOST_EventManager::popEvent() { GHOST_IEvent* event = peekEvent(); if (event) { m_events.pop_back(); } return event; }
void processEvents() { Event* event = NULL; Time processTime; Time platformTime; getRealTime(&platformTime); set_imask(15); event = peekEvent(NULL); while (event && higherPriority(event)) { safeToProcess(event, &processTime); if (compareTime(platformTime, processTime) >= 0) { queuePriority(event); removeAndPropagateSameTagEvents(event); setCurrentModelTag(event); set_imask(0); fireActor(event); getRealTime(&platformTime); set_imask(15); freeEvent(event); stackedDeadlineIndex--; event = NULL; } else { if (compareTime(processTime, lastTimerInterruptTime) == LESS) { lastTimerInterruptTime.secs = processTime.secs; lastTimerInterruptTime.nsecs = processTime.nsecs; setTimedInterrupt(&processTime); } } event = peekEvent(event); } /* if (stackedModelTagIndex >= 0) { currentMicrostep = executingModelTag[stackedModelTagIndex].microstep; currentModelTime = executingModelTag[stackedModelTagIndex].timestamp; stackedModelTagIndex--; } else { DBG(("cannot restore model tag\r\n")); } */ set_imask(0); }
bool ATOM_EventDispatcher::dispatchPendingEvents (void) { for (;;) { ATOM_EventQueue::EventDispatchInfo info; if (!peekEvent (&info, true)) { return false; } if (info.handler && info.handlerMap) { // accquire the lock to prevent the handler been destroyed while the handler is involving. ATOM_Mutex::ScopeMutex lock(_handlerSetLock); HandlerSetIter it = _handlerSet.find (info.handler); if (it != _handlerSet.end ()) { _handlerSet.erase (it); ATOM_EventTrigger *trigger = *info.trigger; if (trigger) { trigger->setHost (info.handler); trigger->setHandlerProc (info.handlerProc); trigger->handleEvent (info.event); } else { info.handlerMap->handleEvent(info.handler, info.event); } } } else { handleEvent (info.event); } ATOM_DELETE(info.event); } }