97 lines
2.6 KiB
C++
97 lines
2.6 KiB
C++
|
|
#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) ;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
|