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

📄 mydl.cpp

📁 一个通讯管理机的源代码。比较好用。推荐
💻 CPP
字号:
#include "mydl.h"/*static UINT thrdRead(void* pVoid){	CMyDL *pDL = (CMyDL *)pVoid;//	pDL->m_mutex.Lock();	pDL->m_bThreadAlive2 = true;	while (1) {		pDL->ReadFrmPL();	}	return 0;}*/bool CMyDL::Init(){	bool bRet = false;	if (m_plsvr.Status() == 0)	{/*		m_hShutdownEvent2 = CreateEvent(NULL, TRUE, FALSE, NULL);		if (m_pThrdRead = AfxBeginThread(thrdRead,this))			bRet = true;		else 			m_pThrdRead = NULL;*/		bRet = true;	}	return bRet;}void CMyDL::Destroy(){/*	if (m_pThrdRead)	{		while (m_bThreadAlive2)		{			SetEvent(m_hShutdownEvent2);			Sleep(20);		}		m_pThrdRead = NULL;	}*/	m_plsvr.Disconnect();}CMyDL::~CMyDL(){	Destroy();}bool CMyDL::WriteToPL(BYTE* pBuf,WORD wSize){	bool bRet = false;	if (m_plsvr.Status() == 0)		bRet = m_plsvr.Write(pBuf,wSize);	return bRet;}int CMyDL::IND(CFrameNode*& pfn,int nMilliSecs){	int nIndications = 0;	if (m_plsvr.Status() == 0)	{		CFrameNode fnR;		CDQue* pDQueRecv = m_plsvr.GetRecvQueue(0);		CMyFrame rf;		if (pDQueRecv && rf.BufferToFrame(pDQueRecv))		{			rf.FrameToBuf(fnR);			if (fnR.m_wSize > 0) //有用户数据			{				pfn = new CFrameNode;				*pfn = fnR;				nIndications = 1;			}		}	}	return nIndications;}/*int CMyDL::ReadFrmPL(){	bool bIndications = false;	int nFunc = -1;	if (m_plsvr.Status() == 0)	{		CFrameNode fnR;		CDev* pDev = NULL;		for (BYTE b=0;b<256;b++)		{			CDQue* pDQueRecv = m_plsvr.GetRecvQueue();			if (pDQueRecv == NULL)				break;			if (BufferToFrame(pDQueRecv))			{				AddIOStream(3,m_pFrameRecv->m_pbyInBuf,m_pFrameRecv->m_wInLength);				m_pFrameRecv->FrameToBuf(fnR);				if (fnR.m_wSize >= 0) //有用户数据				{					CFrameNode* pfn = new CFrameNode;					*pfn = fnR;					m_queUsrData.Add(pfn);				}			}		}	}	if (WAIT_OBJECT_0 == WaitForSingleObject(m_hShutdownEvent2, 20))	{		m_bThreadAlive2 = false;		AfxEndThread(101);	}	//////////////////	m_nStatus = 0;	return  nFunc;}*/int CMyDL::REQ(BYTE byService,CFrameNode *pFNSend,DWORD dwMilliSecs,bool bRetry){	int nConfirm = -4; //等待物理层可用	if (Status() == 0)	{		switch (byService)		{		case 0: //send-confirm; Request-Respond			{				CDataNode dn;				CMyFrame sf;				sf.SetupFrame(pFNSend);				sf.FrameToBuffer(dn);				if (WriteToPL(dn.m_pbyData,dn.m_wSize))				{					nConfirm = 0;				}				else nConfirm = -1;			}			break;		case 2: //send-confirm ,cancel current secondary frames for half duplex			break;		case 3: //send-no-reply ,cancel current secondary frames for half duplex			break;		case 4: //return link status, return successful if the data link is not busy			nConfirm = 0;//GetStatus(pDev);			break;		default: break;		}	}	else nConfirm = -1;	return nConfirm;}

⌨️ 快捷键说明

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