//查找定时 MAP_TIMER_HANDLER_ITER ScriptTimerMgr::findTimer(OBJID idTimer) { MAP_TIMER_HANDLER_ITER iter = m_mapHandler.find(TimerID(idTimer, true)); if (iter == m_mapHandler.end()) { iter = m_mapHandler.find(TimerID(idTimer, false)); } return iter; }
//添加一次性的定时 unsigned int ScriptTimerMgr::AddTimerOnce_Callback(ITimerCallback* callback, float fInterval) { if (!callback) return 0; OBJID nId = getNextGuid(); m_mapHandler.insert(make_pair(TimerID(nId, true), TimerHandler(callback))); m_pkTimerMgr->SetTimer(this, nId, fInterval); return nId; }
//添加一次性的脚本定时 unsigned int ScriptTimerMgr::AddTimerOnce_Lua(LuaObject func, float fInterval) { if (!func.IsFunction()) { return 0; } OBJID nId = getNextGuid(); m_mapHandler.insert(make_pair(TimerID(nId, true), TimerHandler(func))); m_pkTimerMgr->SetTimer(this, nId, fInterval); return nId; }
void TimerManager::addTimer(uint32 interval, TimerHandle &handle, const TimerFunc &func) { Common::StackLock lock(_mutex); removeTimer(handle); _timers.push_back(TimerID()); std::list<TimerID>::iterator id = --_timers.end(); handle._iterator = id; handle._empty = false; id->_func = func; id->_id = SDL_AddTimer(interval, &TimerManager::timerCallback, static_cast<void *>(&handle)); if (id->_id) return; handle._iterator = _timers.end(); handle._empty = true; _timers.erase(id); throw Common::Exception("Failed to add timer"); }