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

📄 physerver.cpp

📁 一个通讯管理机的源代码。比较好用。推荐
💻 CPP
字号:
#include "physerver.h"CPhyService::CPhyService(CSerialPortDef *pChannel) : m_serial(pChannel){	m_nStatus = -1;}CPhyService::~CPhyService(){	Disconnect();}bool CPhyService::Connect(){	bool bRet = false;	//open IO port	if (m_serial.Open())	{		pthread_attr_t attr;		pthread_attr_init(&attr);		pthread_attr_setdetachstate(&attr,PTHREAD_CREATE_DETACHED);		m_nStatus = 0;		if (pthread_create(&m_hThread,&attr,ReadSerial,(void *)this) == 0)		{			bRet = true;		}		else		{			m_nStatus = -1;			m_serial.Close();		}		pthread_attr_destroy(&attr);	}	return bRet;}void CPhyService::Disconnect(){	if (m_nStatus != -1)	{		m_nStatus = -1;		if (m_hThread)		{			cout << "phy: " << m_hThread << endl;			pthread_cancel(m_hThread);		}		m_serial.Close();	}}bool CPhyService::Reset(){	Disconnect();	sleep(2);	return Connect();}void *ReadSerial(void *p){	CPhyService * pPS= (CPhyService *)p;	pthread_setcancelstate(PTHREAD_CANCEL_ENABLE,NULL);	pthread_setcanceltype(PTHREAD_CANCEL_ASYNCHRONOUS,NULL);	BYTE aBuf[256];	timeval tv;	sleep(5);	while(1)	{		if (pPS->Status()!=-1)		{			int nLen=0;			nLen= read(pPS->m_serial.GetFileHandle(),aBuf,256);			if (nLen > 0)			{				gettimeofday(&tv,NULL);				CDataNode* pDN = new CDataNode(tv,aBuf,nLen);				pPS->m_queRecv.Add(pDN);				pPS->AddIOStream(tv,aBuf,nLen,true);                #ifdef _COMMONITOR		            cout  << endl;	            cout  << '{' <<nLen << '}';	            for (int nnn=0; nnn<nLen; nnn++)	            {		            char c[16];		            sprintf(c," %02x ",aBuf[nnn]);		            cout << c;	            }                #endif						}		}		usleep(10000); //10 milliseconds	}}

⌨️ 快捷键说明

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