很纠结的问题:串口通信
最近在写一个串口通信的应用
发现这样一个问题:
串口接收的部分代码是:
void CCOMDlg::ReadCOMData(void)
{
//PurgeComm(m_ComHandle, PURGE_TXCLEAR|PURGE_RXCLEAR);
ULONG bytesRead;
DWORD EventMask = EV_RXCHAR;
char buff[4096]; // Read buffer
memset(buff,0,sizeof(buff));
// Setting the CommMask to listen for this event (4a)
SetCommMask(m_ComHandle, EV_RXCHAR);
// Wait on the event
while(WaitCommEvent(m_ComHandle, &EventMask, NULL))
//while(1)
{
//
//PurgeComm(m_ComHandle, PURGE_RXCLEAR);
RETAILMSG(1,(TEXT("==========================================================================================\r\n")));
memset(buff,0,sizeof(buff));
if(!ReadFile(m_ComHandle,buff, sizeof(buff), &bytesRead,NULL))
{
continue;
}
if(bytesRead == 0)
{
MessageBox(L"chuankoushujuwei0");
continue;
}
/*char *buf;*/
CString log;
char tt[5];
for(DWORD i=0;i<1000;i++)
{
sprintf(tt,"%02X ",(BYTE*)(buff[i] & 0xff));
log+=tt;
}
RETAILMSG(1,(TEXT("str000=%s\r\n"),log));
//CString str;
//str.Format(L"%s", buff);
CString str(buff);//
hmjchuangkousuoyoude+=str;
/////////////////////////////////////\
发现加了PurgeComm(m_ComHandle, PURGE_RXCLEAR);之后串口接收的这个线程函数很容易是数据接收不完整
以前也写了不少这样的串口通信程序,没碰到这个问题。不知道有谁碰到这个现象