📄 monitor.cpp
字号:
#include "stdafx.h"
#include "monitor.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
CMonitorManager AFX_EXT_CLASS gbMonitorManager;
CUserMonitorManager AFX_EXT_CLASS gUserMonitorManager;
void CMonitorObjectGroup::RemoveObject(CMonitorObject *pOb){
WaitForSingleObject(m_hMutex,INFINITE);
try{
BOOL bFind=FALSE;
for(int i=0;i<m_iNumOfObject;i++){
if(bFind)m_pCMonitorObjectList[i-1]=m_pCMonitorObjectList[i];
else if(m_pCMonitorObjectList[i]==pOb){
bFind=TRUE;
}
}
if(bFind){
m_iNumOfObject--;
if(m_MaxNumOfObject>m_iNumOfObject+PRENUMBEROFOBJECT){
m_MaxNumOfObject-=PRENUMBEROFOBJECT;
CMonitorObject * * p=new CMonitorObject* [m_MaxNumOfObject];
ASSERT(p);
memcpy(p,m_pCMonitorObjectList,m_iNumOfObject*sizeof(CMonitorObject*));
delete [] m_pCMonitorObjectList;
m_pCMonitorObjectList=p;
}
m_bUpDateAll=TRUE;
pOb->pGroup=NULL;
}
}
catch(...){
}
ReleaseMutex(m_hMutex);
};
void CMonitorObjectGroup::AddObject(CMonitorObject * pOb){
try{
if(!m_iNumOfColum){
m_iNumOfColum=pOb->GetFeatureorStatusNum();
if(m_iNumOfColum){
m_pColumList=new UniVar[m_iNumOfColum];
ASSERT(m_pColumList);
for(int i=0;i<pOb->GetFeatureorStatusNum();i++){
pOb->GetFeatureorStatusNameFromIdx(m_pColumList[i],i);
}
}
}
}
catch(...){
return;
}
WaitForSingleObject(m_hMutex,INFINITE);
try{
if(m_MaxNumOfObject==m_iNumOfObject){
m_MaxNumOfObject+=PRENUMBEROFOBJECT;
CMonitorObject * * p=new CMonitorObject* [m_MaxNumOfObject];
ASSERT(p);
memcpy(p,m_pCMonitorObjectList,m_iNumOfObject*sizeof(CMonitorObject*));
delete [] m_pCMonitorObjectList;
m_pCMonitorObjectList=p;
}
m_pCMonitorObjectList[m_iNumOfObject++]=pOb;
pOb->pGroup=this;
}
catch(...){
}
ReleaseMutex(m_hMutex);
};
BOOL CMonitorObject::GetFeatureorStatusChanged(int idx){
if(idx<0){
if(m_bChanged){
return TRUE;
}
return FALSE;
}
if(!m_iStatusKeyNum||m_iStatusKeyNum<=idx)return FALSE;
if(m_pbChanged[idx]){
m_pbChanged[idx]=0;
m_bChanged--;
return TRUE;
}
return FALSE;
}
CMonitorObject::CMonitorObject()
{
m_pbChanged=NULL;
pGroup=NULL;
m_iStatusKeyNum=0;
}
CMonitorObject::~CMonitorObject(){
// if(CMonitorObjectGroup::IsValid(pGroup)) pGroup->RemoveObject(this);
if(pGroup->IsValid(pGroup)) pGroup->RemoveObject(this);
if(m_pbChanged)delete [] m_pbChanged;
}
void CMonitorObject::SetFeatureorStatusChanged(int idx){
if(!m_iStatusKeyNum||m_iStatusKeyNum<=idx||idx<0)return ;
if(!m_pbChanged[idx]){
m_pbChanged[idx]=1;
m_bChanged++;
};
pGroup->m_bUpdateS=TRUE;
};
void CMonitorObject::RegisterMonitor()
{
if(gbMonitorManager.m_bSetMonitor){
m_iStatusKeyNum=GetFeatureorStatusNum();
m_pbChanged=NULL;
if(m_iStatusKeyNum>0){
m_pbChanged=new BOOL[m_iStatusKeyNum];
if(!m_pbChanged){
m_iStatusKeyNum=0;
}
else {
for(int i=0;i<m_iStatusKeyNum;i++){
m_pbChanged[i]=1;
}
}
}
else m_iStatusKeyNum=0;
m_bChanged=m_iStatusKeyNum;
pGroup=gbMonitorManager.AddObject(this);
ASSERT(pGroup);
}
};
CMonitorObjectGroup * CMonitorGroupManager::AddObject(CMonitorObject *pOb)
{
UniVar p;
pOb->GetObjectName(p);
CMonitorObjectGroup * pO=NULL;
WaitForSingleObject(m_hMutex,INFINITE);
try{
for(int i=0;i<m_pGroupArray.GetSize();i++){
if(p.IsSame(m_pGroupArray[i]->m_uvGroupName)){
pO=m_pGroupArray[i];
}
}
}
catch(...){
}
ReleaseMutex(m_hMutex);
if(!pO){
WaitForSingleObject(m_hMutex,INFINITE);
try{
pO=new CMonitorObjectGroup(p);
m_pGroupArray.Add(pO);
}
catch(...){
}
ReleaseMutex(m_hMutex);
}
pO->AddObject(pOb);
return pO;
}
CUserMonitorManager::CUserMonitorManager(){
m_hMutex=CreateMutex(NULL,FALSE,NULL);
ASSERT(m_hMutex);
m_MonitorStr.RemoveAll();
};
CUserMonitorManager::~CUserMonitorManager(){
for(int i=0;i<m_GrpList.GetSize();i++){
delete [] m_GrpList[i]->pFName;
delete m_GrpList[i];
}
for(i=0;i<m_UserList.GetSize();i++){
delete m_UserList[i];
}
CloseHandle(m_hMutex);
m_MonitorStr.RemoveAll();
};
CUserMonitor * CUserMonitorManager::CreateUserMonitorObject(UniVar uvGName,UniVar uvOName,int iNum,UniVar * puvFName,BOOL bShare)
{
if(gbMonitorManager.m_bSetMonitor){
if(uvGName.IsEmpty()||uvOName.IsEmpty())return NULL;
if(iNum<=0)return NULL;
UniVar p="用户自定义";
p=p+uvGName;
UserMoGrp * pGrp=NULL;
GetRight();
if(m_MonitorStr.Lookup((LPCTSTR)p,(void * &)pGrp)){
if(pGrp->iNum!=iNum){
ReleaseRight();
return NULL;
}
}
else {
pGrp=new UserMoGrp;
pGrp->iNum=iNum;
pGrp->uvName=uvGName;
pGrp->pFName=new UniVar[iNum];
for(int i=0;i<iNum;i++)
pGrp->pFName[i]=puvFName[i];
m_MonitorStr.SetAt((LPCTSTR)p,(void * &)pGrp);
m_GrpList.Add(pGrp);
}
p=p+uvOName;
CUserMonitor * pUm=NULL;
if(m_MonitorStr.Lookup((LPCTSTR)p,(void * &)pUm)){
ReleaseRight();
return pUm;
}
else {
pUm=new CUserMonitor(uvOName,pGrp,this,bShare);
m_UserList.Add(pUm);
m_MonitorStr.SetAt((LPCTSTR)p,(void * &)pUm);
pUm->RegisterMonitor();
}
ReleaseRight();
return pUm;
}
return NULL;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -