⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 publicclass.cpp~

📁 电力故障信息采集,主要是针对南自的保护装置,这个程序用在Linux操作系统下
💻 CPP~
📖 第 1 页 / 共 2 页
字号:
    memcpy(&pNode->m_nodeinfo,&st,sizeof(st_nodeinfo));    m_SendNode.append(pNode);    //通知发送线程有数据需要发送    m_NoticSendLock.unlock();    return 1;}bool CNodeManage :: AddSendDataNodeEx(long DestPid,long DestThread,unsigned int DataType,int iMachineNo,char* UniqueCmd,				  void* qbuf,int iSize,				  unsigned int DataFrom,int iResult,int DisplayFlag,				  int Level,long TransThread){    st_nodeinfo st;    memset(&st,0x00,sizeof(st_nodeinfo));    if(DestPid==0) return 0;    st.mtype=DestPid;st.requestid=getpid();st.m_CurrentThread=DestThread;st.m_DataType=DataType;    st.m_DataFrom=DataFrom;st.m_iResult=iResult;st.m_DisplayFlag=DisplayFlag;st.m_MachineNo=iMachineNo;    st.m_Level=Level;st.m_TransThread=TransThread;    strcpy(st.m_UniqueCmd,UniqueCmd);    if(qbuf&&iSize>0)    {	char* buff=new char[iSize];memset(buff,0x00,iSize);	memcpy(buff,qbuf,iSize);	st.m_SegmentPid=(long)buff;	st.m_iSize=iSize;    }    CDataNode* pNode=new CDataNode();    memcpy(&pNode->m_nodeinfo,&st,sizeof(st_nodeinfo));    m_SendNode.append(pNode);    //通知发送线程有数据需要发送    m_NoticSendLock.unlock();    return 1;}bool CNodeManage :: AddSendDataNode(CDataNode* ppNode){    m_SendNode.append(ppNode);    //通知发送线程有数据需要发送    m_NoticSendLock.unlock();    return 1;}bool CNodeManage :: TransSendDataNode(CDataNode* ppNode){    CDataNode* pNode=new CDataNode(ppNode);    m_SendNode.append(pNode);    //通知发送线程有数据需要发送    m_NoticSendLock.unlock();    return 1;}CDataNode* CNodeManage :: FindSendDataNode(){    if(m_SendNode.count()>0)	return m_SendNode.at(0);    return NULL;}void CNodeManage :: DeleteSendDataNode(CDataNode* pNode){    if(!pNode) return;    char* buff=NULL;    if(pNode->m_nodeinfo.m_SegmentPid>0)    {	buff=(char*)pNode->m_nodeinfo.m_SegmentPid;	if(buff)	{	    delete [] buff;buff=NULL;pNode->m_nodeinfo.m_SegmentPid=0;	}    }    m_SendNode.remove(pNode);}CPublicClass :: CPublicClass(){    m_UniqueId=0;    m_Stop=false;m_OutToConsole=0;    m_MsgQueueID[0]=0;m_isDebug=2;    //key_t keyval=ftok(".",'a');    return;}CPublicClass :: ~CPublicClass(){    //删除消息队列    return;}void CPublicClass::MakeMessageQueue(){    //产生消息队列号    int makecount=0;CMessageQueue mq;    for(int i=0;i<MESSAGEQUEUES;i++)    {	key_t keyval=ftok(".",'m'+i);	m_MsgQueueID[i]=mq.Open_MessageQueue(keyval);	while(m_MsgQueueID[i]<=0&&makecount<5)	{	    mq.Remove_MessageQueue(m_MsgQueueID[i]);	    m_MsgQueueID[i]=mq.Open_MessageQueue(keyval);	    makecount++;	}    }}QString CPublicClass :: GetNewRecordIndex(QString sHeader){    QString s1,tmps,currForward;    if(sHeader=="")    {	sHeader=m_ClassFlag;    }    QString strHeader="000000"+sHeader;strHeader=strHeader.right(6);    currForward.sprintf("%s%03d%s",strHeader.data(),m_StationNo,	       getTimeStr());    if(currForward!=m_ForwardStr) m_UniqueId=0;    m_UniqueId++;    s1.sprintf("%s%04d",currForward.data(),(int)m_UniqueId);    m_ForwardStr=currForward;    return s1;}QString CPublicClass :: GetWorkPath(){    QString s;	//s=QDir::currentDirPath();	return getenv("PWD");    return s;}QString CPublicClass :: GetWorkPath(QString ModuleName){    QString s;    s.sprintf("%s",getenv("PWD"));s=s.stripWhiteSpace();    //使用Ps    QString cmd;    cmd.sprintf("ps -ef|grep %s >tempfile",ModuleName.data());system(cmd.data());    QFile f("tempfile");    bool b=f.open(IO_ReadOnly);    if(!b) return s;    char buf[1024];    f.readLine(buf,1024);f.close();f.remove();cmd.sprintf("%s",buf);    //查找"./"    int index0=cmd.find("./",0);    if(index0>=0)    {	s.sprintf("%s",getenv("PWD"));s=s.stripWhiteSpace();return s;    }    index0=cmd.find("pts/",0);if(index0<0) index0=0;    int index1=cmd.find("/",index0+1);int index2=cmd.findRev("/",cmd.length());    if(index1<0||index2<0||index1==index2) return "/root";    s=cmd.mid(index1,index2-index1);    printf("work:%s\n",s.data());    return s;}int CPublicClass ::GetPIDbyModulName(QString ModulName){    FILE *f;char buf[1024];QString s;    s.sprintf("ps -e|grep '%s'",ModulName.data());    f = fopen(s.data(),"r");    s.sprintf("%s",fgets(buf,1024,f));    s=s.stripWhiteSpace();    pclose(f);    int index=s.find(" ",0);    if(index<0) return -1;    s=s.mid(0,index);    return s.toInt();}bool CPublicClass::GetConfigFileInfo(QString FileName){    CXMLReader xmlreader((GetWorkPath()+"/"+FileName).data());    bool b=xmlreader.OpenDomXMLFile();    if(!b)    {	printf("缺少子站配置文件 %s......\n",(GetWorkPath()+"/"+FileName).data());return false;    }    if(xmlreader.GetSomeNode("body","name","uniquecode"))		m_UniqueCode = xmlreader.GetCurrentNodeAttribValue("value");    if(xmlreader.GetSomeNode("body","name","substationcode"))		m_StationNo = atol( xmlreader.GetCurrentNodeAttribValue("value") );    if(xmlreader.GetSomeNode("body","name","databaseserver"))		m_pghost.sprintf("%s",xmlreader.GetCurrentNodeAttribValue("value"));    if(xmlreader.GetSomeNode("body","name","databasename"))		m_dbname.sprintf("%s",xmlreader.GetCurrentNodeAttribValue("value"));    if(xmlreader.GetSomeNode("body","name","databaseuser"))		m_dbuser.sprintf("%s",xmlreader.GetCurrentNodeAttribValue("value"));    if(xmlreader.GetSomeNode("body","name","databasepass"))		m_dbpass.sprintf("%s",xmlreader.GetCurrentNodeAttribValue("value"));    //创建必需的目录    QString tmps=GetWorkPath()+"/data";  mkdir(tmps.data(),0666);    tmps=GetWorkPath()+"/data/srcdata";   mkdir(tmps.data(),0666);    tmps=GetWorkPath()+"/data/tmpdata";  mkdir(tmps.data(),0666);    tmps=GetWorkPath()+"/Module";      mkdir(tmps.data(),0666);    tmps=GetWorkPath()+"/devconfig";    mkdir(tmps.data(),0666);    return true;}//////////////////////////启动指定的模块进程///////////////////////////////////////////////////bool CPublicClass::StartSomeDevModule(QString ModulePath,QString ModuleName){    QString sModuleName;    if(ModulePath=="")    {	sModuleName=GetWorkPath()+"/Module/"+ModuleName;    }    else    {	sModuleName=ModulePath+"/"+ModuleName;    }    //检查模块是否存在    printf("ModuleName:%s\n",sModuleName.data());    pid_t child;    if((child=fork())==-1)    {	return false;    }    else if(child==0)	execl(sModuleName.data(),ModuleName.data(),"-r","-d",NULL);    else    {	return true;    }    return true;}CXMLReader* CPublicClass::FindXmlFile(QString szFileName){    CXMLReader* pxml = NULL;    for (int i=0; i<(int)m_XmlList.count(); i++)    {	pxml = m_XmlList.at(i);	if (0 == pxml->m_strFileName.compare(szFileName.data()))// == szFileName)	{	    return pxml;	}    }    pxml = new CXMLReader(szFileName.data());	if (!pxml->OpenDomXMLFile())    {	delete pxml;	pxml = NULL;	return NULL;    }    m_XmlList.append(pxml);    return pxml;}bool CPublicClass :: AnylizeParam(QString moduleName,/*QApplication &a,*/int argc, char ** argv){    printf("#######################################:%s\n","333");    //解析模块名称参数    int mi=_CheckParamWild(argc,argv,"-module");		//检查模块名称参数    if(mi<0)  //没有带模块参数    {	m_ModuleName=moduleName.right(moduleName.length()-moduleName.findRev('/')-1);//a.name();    }    else    {	QString s=QString(argv[mi]);	int in=s.find("=",0);	if(in<0)	{	    printf("非法的模块名称:-module=<模块名称>");_DisplayHelp();return 0;	}	m_ModuleName=s.mid(in+1).stripWhiteSpace();	m_ModulePath=_GetFileAbsPath(m_ModuleName);	m_ModuleName=_GetFileName(m_ModuleName);    }    if(m_ModuleName=="") {_DisplayHelp(); return 0;}    //检查模块是否已经启动    if(_CheckModuleRun(m_ModuleName))    {	printf("模块%s已经运行!\n",m_ModuleName.data());abort();    }    //解析trace参数    mi=_CheckParamWild(argc,argv,"-trace");    if(mi<0)  //没有调试参数    {	memset(&m_MonitorData,0x00,sizeof(st_monitorsrc));    }    else    {	QString s=QString(argv[mi]);	int in=s.find("=",0);	if(in<0)	{	    memset(&m_MonitorData,0x00,sizeof(st_monitorsrc));	}	else	{	    s=s.mid(in+1).stripWhiteSpace();	    GetTraceParam(s);	}    }    //解析Debug参数    mi=_CheckParamWild(argc,argv,"-debug");    if(mi<0)  //没有调试参数    {	m_isDebug=0;    }    else    {	m_isDebug=1;	QString s=QString(argv[mi]);	int in=s.find("=",0);	if(in<0)	{	    m_OutToConsole=3;m_DebugFile=GetDataFileString();	}	else	{	    s=s.mid(in+1).stripWhiteSpace();	    int index=s.find("+",0);	    if(index<0)	    {		if(s=="auto")		{		    m_DebugFile=GetDataFileString();  m_OutToConsole=1;		}		else if(s=="console")		{		    m_DebugFile="";  m_OutToConsole=2;		}	    }	    else	    {		QString s1=s.mid(0,index);		QString s2=s.mid(index+1);		m_OutToConsole=0;		if(s1=="auto"||s2=="auto")		{		    m_DebugFile=GetDataFileString();  m_OutToConsole++;		}		if(s1=="console"||s2=="console")		{		    m_OutToConsole=+2;		}		if(s1!="auto"&&s1!="console")		{		    m_DebugFile=s1;		}		if(s2!="auto"&&s2!="console")		{		    m_DebugFile=s2;		}		if(m_DebugFile!="") m_OutToConsole++;	    }	}    }    return true;}QString CPublicClass :: GetDataFileString(){	QString Path=GetWorkPath()+"/data/"+m_ModuleName;	mkdir(Path.data(),0666);	QString Name;Name.sprintf("%s/%sData%0s",Path.data(),m_ModuleName.data(),				  getTimeStr());	Name+=".txt";	return Name;}void CPublicClass :: FillMachineNo(QString sMach){    int i=sMach.find("+",0);    if(i<0) m_MonitorData.m_MachineNo[0]=sMach.mid(0).toInt();   else    {	m_MonitorData.m_MachineNo[0]=sMach.mid(0,i).toInt();	for(int j=1;j<5;j++)	{	    int index=sMach.find("+",i+1);	    if(index<=i+1)	    {		m_MonitorData.m_MachineNo[j]=sMach.mid(i+1).toInt();		break;	    }	    m_MonitorData.m_MachineNo[j]=sMach.mid(i+1,index-i-1).toInt();	    i=index;	}    }}//(201,11111,10000)void CPublicClass :: GetTraceParam(QString Param){    int i=Param.find(",");    if(i<0)    {	memset(&m_MonitorData,0x00,sizeof(st_monitorsrc));	FillMachineNo(Param);	m_MonitorData.m_SendFlag=1;m_MonitorData.m_RecvFlag=1;    }    else    {	FillMachineNo(Param.mid(0,i));	if(Param.mid(i+1)=="recv")	{	    m_MonitorData.m_SendFlag=0;m_MonitorData.m_RecvFlag=1;	}	else if(Param.mid(i+1)=="send")	{	    m_MonitorData.m_SendFlag=1;m_MonitorData.m_RecvFlag=0;	}	else	{	    m_MonitorData.m_SendFlag=1;m_MonitorData.m_RecvFlag=1;	}    }}bool CPublicClass::isTraceMachine(int MachineNo){    bool bfind=false;    for(int i=0;i<5;i++)    {	if(m_MonitorData.m_MachineNo[i]==0) break;	if(m_MonitorData.m_MachineNo[i]==MachineNo)	{	    bfind=true;break;	}    }    return bfind;}bool CPublicClass::OutDataToConsole(int MachineNo,QString MachineName,unsigned char* buffer,long len,int SRFlag){	//如果不是监视设备则不处理    if(!isTraceMachine(MachineNo)) return false;    if (SRFlag==0&&m_MonitorData.m_SendFlag==0) return false;    if (SRFlag==1&&m_MonitorData.m_RecvFlag==0) return false;    QString prifix="RECV";    if(SRFlag==0) prifix="SEND";    //加锁    CLMutexLocker(&m_OutLock,true);    QString ds=getTimeStr();    QString tmps="",msg="";    msg.sprintf("[%s-%d(%s) %s %s(%04d)]", m_ModuleName.data(), MachineNo,MachineName.data(), ds.data(), prifix.data(), (int)len);    printf("%s",msg.data());    for(int i=0;i<len;i++)    {	printf("%02X ",buffer[i]);    }    printf("\n");    return true;}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -