UINT CommWatchProc(LPVOID pParam) 
{
DWORD dwEventMask;//=0;
CMyTestCommDlg* tempcom=(CMyTestCommDlg*)pParam;
SetCommMask(hCom,EV_ERR|EV_RXCHAR);
//OVERLAPPED osRead;
//memset(&osRead,0,sizeof(OVERLAPPED));
//osRead.Offset=0;
//osRead.OffsetHigh=0;
//osRead.hEvent=CreateEvent(NULL,TRUE,FALSE,NULL);
LPOVERLAPPED os=&tempcom->osRead;
BOOL statetem=WaitCommEvent(hCom,&dwEventMask,os);//?????
ATLTRACE("hCom=%d  os->InternalHigh=%d  dwEventMask=%x  statetem=%d\n",hCom,os->InternalHigh,dwEventMask,statetem);
if ((dwEventMask&EV_RXCHAR)==EV_RXCHAR)
{
COMSTAT comstat;
DWORD dwLength;
DWORD dwErrorFlags;
ClearCommError(hCom,&dwErrorFlags,&comstat);
dwLength=comstat.cbInQue;
ATLTRACE("dwLength=%d\n",dwLength);
if(dwLength>0)
{
BOOL fReadStat;
char str[201];
DWORD count;
fReadStat = ReadFile(hCom,&str,200,&count,os);//读数据
str[count]=0;
if(!fReadStat)
{
if(GetLastError()==ERROR_IO_PENDING)
{
while(!GetOverlappedResult(hCom,os,&count,TRUE))

DWORD dwError = GetLastError(); 
if(dwError == ERROR_IO_INCOMPLETE) continue;//缓冲区数据没有读完,继续 
}
}
}
::PostMessage(tempcom->m_hWnd,COM_RECVDATA,(unsigned int)str,count);//接收到字符事件后,可以将此消息登记到由pParam有指定的窗口类中进行处理 
}
}
if((dwEventMask&EV_ERR)==EV_ERR)
{
...
}
return 0;
}
以上是部分代码,目前状况是:另外一台电脑隔1s发数据,运行exe可是却不能收到数据.ATLTRACE检测到,dwEventMask为cccccccc(初始值),返回值statetem为0.而如果debug下断点,运行到BOOL statetem=WaitCommEvent(hCom,&dwEventMask,os);则可以发现dwEventMask为129,这样可以进入事件函数体中,但同样接收不到串口的数据。有谁知道是什么原因呢?