void TimerMgr::uninit() { if (NULL != m_mutex) { (void)VOS_MutexLock(m_mutex); } m_bStop = true; m_TimerMap.clear(); if (NULL != m_mutex) { (void)VOS_MutexUnlock(m_mutex); } if(VOS_NULL != m_threadHandle) { (void)VOS_ThreadJoin(m_threadHandle); m_threadHandle = NULL; } if (VOS_NULL != m_mutex) { (void)VOS_DestroyMutex(m_mutex); m_mutex = NULL; } m_TimerCBFunc = NULL; }
/******************************************************************************* Function: CNVSTimer::exit() Description: 退出定时检测线程 Calls: Called By: Input: 无 Output: 无 Return: 无 *******************************************************************************/ void CNVSTimer::exit() { if(NULL == m_pVosThread) { IVS_RUN_LOG_ERR("NVSTimer exit: m_pVosThread is null"); return; } //先停止线程 this->m_bExit = VOS_TRUE; errno = 0; long ret_val = VOS_ThreadJoin(m_pVosThread); if (ret_val != VOS_OK) { IVS_RUN_LOG_ERR("Wait timer thread exit failed. ret_val(%ld). error(%d):%s", ret_val, errno, strerror(errno)); } //释放内存 VOS_free(m_pVosThread); m_pVosThread = VOS_NULL; //再释放资源 clearTimer(); //释放锁 (void)VOS_DestroyMutex(m_pMutexListOfTrigger); m_pMutexListOfTrigger = VOS_NULL; IVS_DBG_LOG("FILE(%s)LINE(%d): CNVSTimer::exit: exit complete.", _TIMER_FL_); return; };
IVS_INT32 CSDKDecoderMgr::CleanupSDK() { if(!m_bInit) { return IVS_TVWALL_INIT_NO; } m_bThreadExit = TRUE; m_bInit = FALSE; VOS_ThreadJoin(m_pVosThread); if(NULL!=m_pVosThread) { VOS_free(m_pVosThread); m_pVosThread = NULL; } //清除登录信息 (void)VOS_MutexLock(m_pDecoderInfoMapMutex); for(SDK_DECODER_INFO_MAP::iterator ite=m_decoderInfoMap.begin();ite!=m_decoderInfoMap.end();ite++) { SDK_DECODER_INFO* pInfo = dynamic_cast<SDK_DECODER_INFO*>(ite->second);//lint !e611 if(NULL!=pInfo) { ////////////////////////////////////////////////////////////////////////// //2013-1-28 高书明 先屏蔽HWPuSDK相关函数,与BP的dll冲突 //(void)IVS_PU_Logout(pInfo->ulIdentifyID); ////////////////////////////////////////////////////////////////////////// pInfo->bOnline = FALSE; pInfo->ulIdentifyID = 0; } } (void)VOS_MutexUnlock(m_pDecoderInfoMapMutex); m_pCallBackFun = NULL; m_pUserData = NULL; ////////////////////////////////////////////////////////////////////////// //2013-1-28 高书明 先屏蔽HWPuSDK相关函数,与BP的dll冲突 //BOOL bSucc = IVS_PU_Cleanup(); //return bSucc ? IVS_SUCCEED:IVS_FAIL; return IVS_FAIL; ////////////////////////////////////////////////////////////////////////// }
TimerMgr::~TimerMgr(void) { try { m_bStop = true; m_TimerMap.clear(); if(VOS_NULL != m_threadHandle) { (void)VOS_ThreadJoin(m_threadHandle); m_threadHandle = NULL; } if (VOS_NULL != m_mutex) { (void)VOS_DestroyMutex(m_mutex); m_mutex = NULL; } m_bStop = false; m_TimerCBFunc = NULL; } catch(...){} }
CSDKDecoderMgr::~CSDKDecoderMgr(void) { m_bThreadExit = TRUE; m_pCallBackFun = NULL; m_pUserData = NULL; VOS_ThreadJoin(m_pVosThread); try { CSDKDecoderMgr::RemoveDecMgrObj(this); RemoveDecoderInfo(); } catch (...) { } VOS_DestroyMutex(m_pDecoderInfoMapMutex); m_pDecoderInfoMapMutex = NULL; if(NULL!=m_pVosThread) { VOS_free(m_pVosThread); m_pVosThread = NULL; } }