/* * Device Detach */ void cwm_detach(COM_DEV *dev) { struct ath_cwm *cw_struct = CWM_HANDLE(dev); struct ath_cwm_eventq_entry *eventqentry; if (cw_struct == NULL) { return; } CWM_DBG_PRINT(cw_struct->wlandev, "%s\n", __func__); /* Cleanup resources */ TIMER_CANCEL(&cw_struct->ac_timer, CANCEL_NO_SLEEP); TIMER_FREE(&cw_struct->ac_timer); spin_lock_destroy(&cw_struct->ac_lock); while (!TAILQ_EMPTY(&cw_struct->ac_eventq)) { eventqentry = TAILQ_FIRST(&cw_struct->ac_eventq); TAILQ_REMOVE(&cw_struct->ac_eventq, eventqentry, ce_entry); OS_FREE(eventqentry); eventqentry = NULL; } /* free CWM memory */ OS_FREE(cw_struct); cw_struct = NULL; }
//清除所有脚本定时器 void CGlobalScriptTimer::ClearScriptTimer() { itST it = m_ScriptTimers.begin(); for(;it != m_ScriptTimers.end();it++) { TIMER_CANCEL((*it).first); } m_ScriptTimers.clear(); itWS itW = m_WaitScripts.begin(); for(;itW != m_WaitScripts.end();itW++) { TIMER_CANCEL((*itW).first); } m_WaitScripts.clear(); }
void stModuParam::ClearTimerAndEvent() { if (Timers.size()>0) { for(stModuParam::itTimer it=Timers.begin(); it!=Timers.end();) { stTimerParam* pParam = (*it); if(pParam->lTimerID > 0) int nNum = TIMER_CANCEL(pParam->lTimerID); pParam->lTimerID = -1; it=Timers.erase(it); OBJ_RELEASE(stTimerParam,pParam); } Timers.clear(); } if (Events.size()>0) { for (list<stEventParam*>::iterator it=Events.begin(); it!=Events.end(); ++it) { OBJ_RELEASE(stEventParam,(*it)); } Events.clear(); } }
/* * CWM Stop */ void cwm_stop(COM_DEV *dev) { struct ath_cwm *cw_struct = CWM_HANDLE(dev); if (cw_struct == NULL) { return; } CWM_DBG_PRINT(cw_struct->wlandev, "%s\n", __func__); if (cw_struct->ac_running) { cw_struct->ac_running = 0; TIMER_CANCEL(&cw_struct->ac_timer, CANCEL_NO_SLEEP); } }
//注销一个脚本定时器 long CGlobalScriptTimer::UnRegisterTimer(long lUserData,long lTimerID) { long lTimerNum = 0; itST it = m_ScriptTimers.begin(); for(;it != m_ScriptTimers.end();) { tagScriptTimer &scripttimer = (*it).second; if( scripttimer.lUserData == lUserData && (lTimerID == -1 || (*it).first == lTimerID) ) { TIMER_CANCEL((*it).first); it = m_ScriptTimers.erase(it); lTimerNum++; } else { it++; } } return lTimerNum; }
//定时触发 void stModuParam::OnTimerOut(long lTimerID) { //处理定时器 itTimer it = Timers.begin(); for(;it != Timers.end();it++) { if((*it)->lTimerID == lTimerID) { stTimerParam *pTimerParam = (*it); if(pTimerParam->nCalledCount++ >= pTimerParam->nCount) { //注销定时器 int nNum = TIMER_CANCEL(pTimerParam->lTimerID); pTimerParam->lTimerID = -1; it = Timers.erase(it); OBJ_RELEASE(stTimerParam, pTimerParam); return; } } } return; }