#include "ChgWorkThread.h" #include "pub_logger_api/logger.h" #include "common/Common.h" #include "boost/make_shared.hpp" using namespace iot_service; CChgWorkThreadPtr g_ptrChgWorkThread = NULL; /* @brief 获取FBD订阅接口单例 */ CChgWorkThreadPtr iot_service::getChgWorkThreadSingleTon(const iot_public::SRunAppInfo &stRunAppInfo) { if (g_ptrChgWorkThread == NULL) { g_ptrChgWorkThread = boost::make_shared(stRunAppInfo); if (g_ptrChgWorkThread != NULL) { if (true != g_ptrChgWorkThread->initialize()) { /* @brief 注册失败后清理资源 */ g_ptrChgWorkThread.reset(); } } } return g_ptrChgWorkThread; } /* @brief 销毁单例,注意:由于使用了智能指针,一定要保证外部的引用全部释放掉,这样才能保证真正释放 */ void iot_service::releaseChgWorkThreadSingleTon() { g_ptrChgWorkThread.reset(); { LOGERROR("单例释放失败,可能由于外部还有对象使用了此智能指针没有释放"); } } bool iot_service::ChgWorkThread::initialize() { //初始化变化数据发送接口库 //================================================================================================ m_ptrChgDataApi = boost::make_shared(m_stRunAppInfo.nDomainId,m_stRunAppInfo.nAppId, m_stRunAppInfo.strAppName.c_str()); if (m_ptrChgDataApi == NULL) { LOGERROR("COperateServerClass ::init(), make_shared fail!\n"); return false; } if (m_ptrChgDataApi->suspendThread() == false) //初始化挂起 { LOGERROR("COperateServerClass ::init(), resumeThread fail!\n"); return false; } return true; } ChgWorkThread::ChgWorkThread(iot_public::SRunAppInfo stRunAppInfo): m_stRunAppInfo(stRunAppInfo), m_ptrChgDataApi(NULL) { } iot_service::ChgWorkThread::~ChgWorkThread() { //释放变化数据接口 if (m_ptrChgDataApi) { m_ptrChgDataApi->suspendThread(); m_ptrChgDataApi.reset(); m_ptrChgDataApi = NULL; LOGINFO("CSrvDataPublish::release():success \n"); } } bool iot_service::ChgWorkThread::resumeThread() { return m_ptrChgDataApi->resumeThread(); } bool iot_service::ChgWorkThread::suspendThread() { return m_ptrChgDataApi->suspendThread(); } bool iot_service::ChgWorkThread::addChgData(iot_idl::SRealTimeDataPkg &objChgData) { return m_ptrChgDataApi->addChgData(objChgData) ; }