91av视频/亚洲h视频/操亚洲美女/外国一级黄色毛片 - 国产三级三级三级三级

  • 大小: 7KB
    文件類型: .rar
    金幣: 2
    下載: 0 次
    發(fā)布日期: 2021-05-17
  • 語言: 其他
  • 標(biāo)簽:

資源簡介

本人自己一直使用的一個簡單實用的串口通訊基本類,需要使用的時候,可以直接繼承該類,實現(xiàn)自己的數(shù)據(jù)讀取方法和數(shù)據(jù)寫入方法就行了。

資源截圖

代碼片段和文件信息

//?MyCom.cpp:?implementation?of?the?MyCom?class.
//
//////////////////////////////////////////////////////////////////////

#include?“stdafx.h“
#include?“MyCom.h“

#ifdef?_DEBUG
#undef?THIS_FILE
static?char?THIS_FILE[]=__FILE__;
#define?new?DEBUG_NEW
#endif

//錯誤信息輸出
inline?int?MessageError(LPCSTR?lpcszError?UINT?nType?=?MB_OK?|?MB_ICONWARNING)
{
CWnd?*pWnd?=?::AfxGetMainWnd();
if(pWnd?!=?NULL)
return?pWnd->MessageBox(lpcszError?“Error“?nType);
else
return?::MessageBox(NULL?lpcszError?“Error“?nType);
}

//////////////////////////////////////////////////////////////////////
//?Construction/Destruction
//////////////////////////////////////////////////////////////////////

MyCom::MyCom()
:?m_bConnected(false)?
m_ePStatus(PS_NOREADY)
{
memset(&m_Connection?0?sizeof(m_Connection)?-?sizeof(CCriticalSection));
}

MyCom::~MyCom()
{

}

//讀取當(dāng)前通訊端口緩存中的數(shù)據(jù)
UINT?MyCom::CommReadBlock(HANDLE?hFile?LPOVERLAPPED?lpOLRead?LPSTR?lpszBlock?UINT?nMaxLength)
{
BOOL???????fReadStat;
COMSTAT????ComStat;
DWORD??????dwErrorFlags;
DWORD??????dwLength;
DWORD??????dwError;

if(hFile?==?NULL)
return?false;

//查詢當(dāng)前通訊緩存區(qū)的隊列中的數(shù)據(jù)字節(jié)數(shù)
::ClearCommError(hFile?&dwErrorFlags?&ComStat);
//計算當(dāng)前所需讀取數(shù)據(jù)的字節(jié)數(shù)
//如果緩存區(qū)中的數(shù)據(jù)字節(jié)數(shù)較當(dāng)前內(nèi)存緩存字節(jié)數(shù)小?
//就讀取當(dāng)前所有數(shù)據(jù);??
//如果緩存區(qū)中的數(shù)據(jù)字節(jié)數(shù)較當(dāng)前內(nèi)存緩存字節(jié)數(shù)大
//就讀取當(dāng)前內(nèi)存緩存區(qū)所支持的最大字節(jié)數(shù).)
dwLength?=?min(nMaxLength?ComStat.cbInQue);

if(dwLength?<=?0)
return?0;

//請求從當(dāng)前的通訊緩存區(qū)讀取數(shù)據(jù)
fReadStat?=?::ReadFile(hFile?lpszBlock?dwLength?&dwLength?lpOLRead);
if(fReadStat)
return?dwLength;

if(GetLastError()?==?ERROR_IO_PENDING)
{
//當(dāng)前發(fā)生I/O重疊操作,繼續(xù)等待I/O操作...
while(!GetOverlappedResult(hFile?lpOLRead?&dwLength?true))
{
dwError?=?GetLastError();
if(dwError?==?ERROR_IO_INCOMPLETE)
continue;
else
{
//當(dāng)前通訊有其它的錯誤發(fā)生
TRACE(““?dwError);
::ClearCommError(hFile?&dwErrorFlags?&ComStat);
if(dwErrorFlags?>?0)
TRACE(““?dwErrorFlags);

break;
}
}
}
else
{
//當(dāng)前通訊發(fā)生了一些其它的錯誤
dwLength?=?0?;
::ClearCommError(hFile?&dwErrorFlags?&ComStat);
if(dwErrorFlags?>?0)
TRACE(““?dwErrorFlags);
}

return?dwLength;
}

//當(dāng)前的通訊端口監(jiān)聽線程函數(shù)
UINT?MyCom::CommMonitorProc(void*?pData)
{
LPCONNECTION pMPParam?=?(LPCONNECTION)pData;
int nLength;
char szBuffer[MAX_BUF_BLOCK?+?1];

//監(jiān)聽當(dāng)前串口數(shù)據(jù)通訊區(qū)的數(shù)據(jù)輸入
while(pMPParam->hCommDev?!=?NULL)
{
DWORD?dwEvtMask?=?0;

//等待當(dāng)前串口通訊的一個讀事件被觸發(fā)
WaitCommEvent(pMPParam->hCommDev?&dwEvtMask?NULL);

if((dwEvtMask?&?EV_RXCHAR)?!=?EV_RXCHAR)
continue;

//從串口讀取數(shù)據(jù)并處理
while((nLength?=?CommReadBlock(pMPParam->hCommDev?
&pMPParam->olRead?(LPSTR)szBuffer?MAX_BUF_BLOCK))?>?0)
{
//處理從串口讀出的數(shù)據(jù)
if(pMPParam->pCom?!=?NULL)
{
pMPParam->pCom->LockThread();
pMPParam->pCom->ProcessReceivedData(szBuffer?nLength);
pMPParam->pCom->UnlockThread();
}

if(::WaitForSingleobject(pMPParam->

?屬性????????????大小?????日期????時間???名稱
-----------?---------??----------?-----??----

?????文件??????13848??2009-09-13?01:09??MyCom.cpp

?????文件???????4608??2003-08-05?15:53??MyCom.h

-----------?---------??----------?-----??----

????????????????18456????????????????????2


評論

共有 條評論

相關(guān)資源