資源簡介
該資源是根據項目需要,實現Ymodem傳輸數據,包括注冊表的修改,為本人自己獨立在協議基礎上開發,為完整MFC工程,對于學習開發MFC和C++的人士具有一定的參考價值!里面思路清晰,代碼注釋詳細!
代碼片段和文件信息
//?Serial.cpp:?implementation?of?the?CSerial?class.
//
//////////////////////////////////////////////////////////////////////
#include?“stdafx.h“
#include?“Serial.h“
#ifdef?_DEBUG
#undef?THIS_FILE
static?char?THIS_FILE[]=__FILE__;
#define?new?DEBUG_NEW
#endif
#define?RECVBUF_SIZE?1024
//////////////////////////////////////////////////////////////////////
//?Construction/Destruction
//////////////////////////////////////////////////////////////////////
CSerial::CSerial()
{
m_hComm?=?INVALID_HANDLE_VALUE; /*?串口操作句柄無效?*/
hRecvThread?=?NULL;
m_ExitThreadEvent?=?NULL; /*?串口接收線程退出事件無效?*/
memset(&dcb?0x00?sizeof(dcb));
}
CSerial::~CSerial()
{
ClosePort();
}
/*******************************************************************************************
函數名稱:?CCeSerial::CommRecvTread
描????述:?串口接收線程
輸入參數:?LPVOID?lparam:?線程參數創建線程時傳入
輸出參數:?無
返????回:?0:?線程退出?返回值沒特殊含義
********************************************************************************************/
DWORD?CSerial::CommRecvTread(LPVOID?lparam)
{
CSerial?*pSerialPort?=?(CSerial?*)lparam;
DWORD?dwLength?=?0;
DWORD?dwError?=?0;
DWORD?dwByte?=?0;
DWORD?dwMask?=?EV_RXCHAR;
DWORD?dwReadBytes?=?pSerialPort->m_RecvLength;
BYTE?*recvBuf?=?new?BYTE[dwReadBytes];
COMSTAT?comStat;
OVERLAPPED?olWait?olRead;
memset(&olWait0sizeof(olWait));
memset(&olRead0sizeof(olRead));?
olWait.hEvent?=?CreateEvent(NULLTRUEFALSENULL);
olRead.hEvent?=?CreateEvent(NULLTRUEFALSENULL);
if?(pSerialPort->m_hComm)
{
pSerialPort->m_criticalSection.Lock();
ClearCommError(pSerialPort->m_hComm?&dwError?&comStat);
PurgeComm(pSerialPort->m_hComm?PURGE_RXCLEAR?|?PURGE_TXCLEAR?|?PURGE_RXABORT?|?PURGE_TXABORT);
pSerialPort->m_criticalSection.Unlock();
}
while(TRUE)
{ /*?等待線程退出事件?*/
if?(WaitForSingleobject(pSerialPort->m_ExitThreadEvent?0)?==?WAIT_object_0)
break;
WaitCommEvent(pSerialPort->m_hComm?&dwMask?&olWait);
if(GetOverlappedResult(pSerialPort->m_hComm?&olWait?&dwByte?TRUE)?==?FALSE)
{
if(GetLastError()?!=?ERROR_IO_PENDING)
{
//return?0x30;
break;
}
//return?0x35;
break;
}
//Clear?the?error?flag
dwError?=?0;
memset(&comStat0sizeof(comStat));
ClearCommError(pSerialPort->m_hComm?&dwError?&comStat);
if(!comStat.cbInQue)
continue;
ZeroMemory(recvBuf?pSerialPort->m_RecvLength);
if?(pSerialPort->m_hComm?!=?INVALID_HANDLE_VALUE)
{ ??????????????????????????????????????/*?從串口讀取數據?*/
pSerialPort->m_criticalSection.Lock();
BOOL?fReadState?=?ReadFile(pSerialPort->m_hComm?recvBuf?dwReadBytes?&dwLength?&olRead);
pSerialPort->m_criticalSection.Unlock();
if(GetOverlappedResult(pSerialPort->m_hComm?&olRead?&dwLength?TRUE)?==?FALSE)
{
break;
}else{
if(dwLength?!=?0) ????????/*?接收成功調用回調函數?*/
pSerialPort->OnCommRecv(pSerialPort->m_UserParam?recvBuf?dwLength);
?屬性????????????大小?????日期????時間???名稱
-----------?---------??----------?-----??----
?????文件?????184320??2012-08-01?22:32??Witium_YModem_Suc_2012_08_01\Witium_YModem\XYModem\debug\XYModem.exe
?????文件????2965308??2012-08-01?22:32??Witium_YModem_Suc_2012_08_01\Witium_YModem\XYModem\debug\XYModem.ilk
?????文件????3689472??2012-08-01?20:09??Witium_YModem_Suc_2012_08_01\Witium_YModem\XYModem\debug\XYModem.pdb
?????文件??????65536??2012-07-26?22:33??Witium_YModem_Suc_2012_08_01\Witium_YModem\XYModem\release\XYModem.exe
?????文件????3255296??2012-07-26?22:33??Witium_YModem_Suc_2012_08_01\Witium_YModem\XYModem\release\XYModem.pdb
?????文件???????9798??2012-08-01?22:32??Witium_YModem_Suc_2012_08_01\Witium_YModem\XYModem\XYModem\Debug\BuildLog.htm
?????文件?????????60??2012-08-01?22:32??Witium_YModem_Suc_2012_08_01\Witium_YModem\XYModem\XYModem\Debug\mt.dep
?????文件??????22133??2012-08-01?17:08??Witium_YModem_Suc_2012_08_01\Witium_YModem\XYModem\XYModem\Debug\Serial.obj
?????文件?????336154??2012-07-27?10:59??Witium_YModem_Suc_2012_08_01\Witium_YModem\XYModem\XYModem\Debug\stdafx.obj
?????文件?????740352??2012-08-01?22:32??Witium_YModem_Suc_2012_08_01\Witium_YModem\XYModem\XYModem\Debug\vc80.idb
?????文件?????724992??2012-08-01?22:32??Witium_YModem_Suc_2012_08_01\Witium_YModem\XYModem\XYModem\Debug\vc80.pdb
?????文件????????664??2012-07-26?18:12??Witium_YModem_Suc_2012_08_01\Witium_YModem\XYModem\XYModem\Debug\XYModem.exe.em
?????文件????????728??2012-07-26?18:12??Witium_YModem_Suc_2012_08_01\Witium_YModem\XYModem\XYModem\Debug\XYModem.exe.em
?????文件????????629??2012-08-01?22:32??Witium_YModem_Suc_2012_08_01\Witium_YModem\XYModem\XYModem\Debug\XYModem.exe.intermediate.manifest
?????文件??????24165??2012-08-01?18:36??Witium_YModem_Suc_2012_08_01\Witium_YModem\XYModem\XYModem\Debug\XYModem.obj
?????文件???13697024??2012-07-27?10:59??Witium_YModem_Suc_2012_08_01\Witium_YModem\XYModem\XYModem\Debug\XYModem.pch
?????文件??????24044??2012-08-01?20:09??Witium_YModem_Suc_2012_08_01\Witium_YModem\XYModem\XYModem\Debug\XYModem.res
?????文件?????102976??2012-08-01?22:32??Witium_YModem_Suc_2012_08_01\Witium_YModem\XYModem\XYModem\Debug\XYModemDlg.obj
?????文件??????23637??2012-07-31?22:13??Witium_YModem_Suc_2012_08_01\Witium_YModem\XYModem\XYModem\Debug\YModem.obj
?????文件???????2763??2012-05-16?10:11??Witium_YModem_Suc_2012_08_01\Witium_YModem\XYModem\XYModem\ReadMe.txt
?????文件???????8098??2012-07-26?22:33??Witium_YModem_Suc_2012_08_01\Witium_YModem\XYModem\XYModem\Release\BuildLog.htm
?????文件?????????60??2012-07-26?22:33??Witium_YModem_Suc_2012_08_01\Witium_YModem\XYModem\XYModem\Release\mt.dep
?????文件??????27571??2012-07-24?22:36??Witium_YModem_Suc_2012_08_01\Witium_YModem\XYModem\XYModem\Release\Serial.obj
?????文件????1973718??2012-07-24?22:36??Witium_YModem_Suc_2012_08_01\Witium_YModem\XYModem\XYModem\Release\stdafx.obj
?????文件?????412672??2012-07-26?22:33??Witium_YModem_Suc_2012_08_01\Witium_YModem\XYModem\XYModem\Release\vc80.idb
?????文件?????749568??2012-07-26?22:33??Witium_YModem_Suc_2012_08_01\Witium_YModem\XYModem\XYModem\Release\vc80.pdb
?????文件????????619??2012-07-26?22:33??Witium_YModem_Suc_2012_08_01\Witium_YModem\XYModem\XYModem\Release\XYModem.exe.intermediate.manifest
?????文件??????26659??2012-07-26?22:33??Witium_YModem_Suc_2012_08_01\Witium_YModem\XYModem\XYModem\Release\XYModem.obj
?????文件???14614528??2012-07-24?22:36??Witium_YModem_Suc_2012_08_01\Witium_YModem\XYModem\XYModem\Release\XYModem.pch
?????文件??????23952??2012-07-24?22:36??Witium_YModem_Suc_2012_08_01\Witium_YModem\XYModem\XYModem\Release\XYModem.res
............此處省略39個文件信息
評論
共有 條評論