VC++串口编程中读线程函数里面各个语句的作用
在网上看到一个串口通信的例程,里面用到多线程编程,其中的读线程函数的代码实现如下,我不知道这个函数实现的一个逻辑顺序是什么,很多语句也不明白是什么意思,如if (dwEvent & EV_RXCHAR) ClearCommError(pThis->ComHandle,&dwReadErrors,&cmState); ReadLen = cmState.cbInQue; memcpy(pThis->RevDataBuf,readbuf,sizeof(char)*actualReadlen);这些语句我都不知道是什么意思,(为什么要把读数据缓冲区里的数据复制到接收数据缓冲区呢??) 好多问题呀,跪求大神帮忙。。。/************************************************************************//*读线程函数 *//************************************************************************/UINT WINAPI CModuleRead::ReadThread(LPVOID lpParam){ CModuleRead *pThis = reinterpret_cast<CModuleRead*>(lpParam); int Count=1; DWORD dwEvent ; //接收事件变量 DWORD ReadLen = 0; //将要读取的字节数 unsigned long actualReadlen = 0;//实际接收的字节数 DWORD dwReadErrors = 0; //接收错误事件 COMSTAT cmState; //串口状态结构体 char *readbuf=NULL; readbuf = pThis->ReadBuf; while (TRUE) { if (WaitCommEvent(pThis->ComHandle,&dwEvent,NULL)) { SetCommMask(pThis->ComHandle,EV_RXCHAR); //接收到字符 if (dwEvent & EV_RXCHAR) { ClearCommError(pThis->ComHandle,&dwReadErrors,&cmState); ReadLen = cmState.cbInQue; if (ReadLen <= 0) { continue; } pThis->SPort.recv(readbuf,ReadLen,actualReadlen,500); ////////////////////////////// //为接收缓冲区申请空间 pThis->RevDataBuf = new char[sizeof(char)*actualReadlen]; ZeroMemory(pThis->RevDataBuf,sizeof(char)*actualReadlen); memcpy(pThis->RevDataBuf,readbuf,sizeof(char)*actualReadlen); int count=0; int tcount=0; // pThis->Convert();// pThis->JugeIn(); if (actualReadlen <= 0) { return 0; } if (pThis->OnSeriesRead) { pThis->OnSeriesRead(pThis->m_pOwner,readbuf,actualReadlen,Count); } } } if (WaitForSingleObject(pThis->ExitHandle,100) == WAIT_OBJECT_0) { break; } } if (pThis->RevDataBuf) { delete [] pThis->RevDataBuf; pThis->RevDataBuf = NULL; } return 1;}