串行通讯时接收数据问题!
在上位机和下位机通讯时,上位机发送一指令后想等待返回数据,自制了一数据接收函数,但调试时发现执行此函数时,如果接收缓冲区里没有数据则跳出函数,不进行等待。郁闷了。请高手指点我错在哪里,我想要在该程序里停止下来,直到接收缓冲区有数据并读出后返回。
void CFY3NO2View::GetDataFromCom()//接收8031发来的数据.
{
DWORD dwEvtMaskX;
OVERLAPPED osRead;
DWORD dwErrorFlags;
COMSTAT ComStat;
DWORD dwLength=0,NUM;
BYTE abln;
char adn[9];
osRead.Offset = 0;
osRead.OffsetHigh = 0;
osRead.hEvent=CreateEvent(NULL,TRUE,FALSE,NULL);
if(osRead.hEvent==NULL)
{
AfxMessageBox("建立事件失败!", MB_OK, 0 );
}
if(!SetCommMask( COMFile,EV_RXCHAR))
dwEvtMaskX=0;
WaitCommEvent( COMFile,&dwEvtMaskX,&osRead );//本想在此等待,但如没有数据, 函数返回。如何才能留住CPU的脚步呢?
if((dwEvtMaskX&EV_RXCHAR)==EV_RXCHAR)
{ int i=0;
do{
ClearCommError( COMFile,&dwErrorFlags,&ComStat);
dwLength=ComStat.cbInQue;
if(dwLength>0)
{
ReadFile( COMFile,&abln,1,&NUM,&osRead);//
GetComDate[i]=abln;
}
else GetComDate[i]=11;
i++;
}while(dwLength>0);
}
CloseHandle(osRead.hEvent);
}