📄 comreadthread.cpp
字号:
// comreadthread.cpp
#include "StdAfx.h"
#include "Resource.h"
#include "comreadthread.h"
#include "MainFrm.h"
#include "comdebugDoc.h"
#include "comdebugView.h"
UINT comreadthread(LPVOID pParam)
{
DWORD nbyte=0;
COMMTIMEOUTS timeout;
unsigned char inbuff[1024];
DWORD dwerrormask;
COMSTAT comstat;
CString recascstr;
int inbyte,la=0 ,allrecevie=0,recascline=0;
CMainFrame *mainframe=(CMainFrame *)pParam;
CComdebugView *pcomdebugview=(CComdebugView *)mainframe->GetActiveView();
CComdebugDoc *pcomdebugdoc=(CComdebugDoc *)pcomdebugview->GetDocument();
if(!(mainframe->lpcommprop->dwProvCapabilities&PCF_INTTIMEOUTS))
{
AfxMessageBox("Can't set interval timeouts");//,NULL,MB_OK);
AfxEndThread(0);
}
::GetCommTimeouts(mainframe->hcomm,&timeout);
timeout.ReadTotalTimeoutMultiplier=5;
timeout.ReadTotalTimeoutConstant=5000;
::SetCommTimeouts(mainframe->hcomm,&timeout);//设置超时
while(mainframe->readendflag)
{
ClearCommError(mainframe->hcomm,&dwerrormask,&comstat);
if(dwerrormask)
{
mainframe->MessageBox("串口发生错误");
return 0;
}
if(comstat.cbInQue)
{
inbyte=comstat.cbInQue;
}
else
{
continue;
}
if(!::ReadFile(mainframe->hcomm,inbuff,inbyte,&nbyte,NULL))//读端口
{
mainframe->MessageBox( "接收错误");
return 0;
}
else
{
if(nbyte)
{
unsigned int i;
CString convertstr;
if(la==0)
{
pcomdebugdoc->inputdata+="*HEX code-!";
la++;
}
for(i=0;i<nbyte;i++)
{
allrecevie++;
if(!isgraph(inbuff[i]))
recascstr+='?';
else
recascstr+=inbuff[i];
convertstr.Format("%x",inbuff[i]/16);
convertstr.MakeUpper();
pcomdebugdoc->inputdata+=convertstr;
convertstr.Format("%x",inbuff[i]%16);
convertstr.MakeUpper();
pcomdebugdoc->inputdata+=convertstr;
pcomdebugdoc->inputdata+=' ';
if(allrecevie%16==0)
{
pcomdebugdoc->inputdata+="\r\n ";
pcomdebugdoc->linenum++;
}
if(allrecevie%32==0)
{
recascstr+="\r\n ";
recascline++;
}
}
mainframe->paintcase=PAINT_COMMUICAT;
pcomdebugview->Invalidate(TRUE);
}
}
}
::PurgeComm(mainframe->hcomm,PURGE_RXCLEAR);
if(nbyte==0)
{
pcomdebugdoc->inputdata+="*Nothing.....";
mainframe->paintcase=PAINT_COMMUICAT;
pcomdebugview->Invalidate(TRUE);
return 0;
}
pcomdebugdoc->inputdata+="\r\n*ASC code-";
pcomdebugdoc->linenum++;
pcomdebugdoc->linenum+=recascline;
pcomdebugdoc->inputdata+=recascstr;
mainframe->paintcase=PAINT_COMMUICAT;
pcomdebugview->Invalidate(TRUE);
mainframe->MessageBox("接收结束");
return 0;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -