97 lines
2.6 KiB
C++
Raw Normal View History

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