我使用异步通信,一下是我等待事件的代码,在一个线程中使用BOOL WaitEventChar()
{
OVERLAPPED os ;
DWORD dwEvtMask,Errors;
COMSTAT Stat; memset( &os, 0, sizeof( OVERLAPPED ));
os.hEvent = CreateEvent( NULL, // no security
TRUE, // explicit reset req
FALSE, // initial event nonsignaled.
NULL ) ; // no name
dwEvtMask = 0 ;
WaitCommEvent(idComDev,&dwEvtMask,&os);
if (WaitForSingleObject(os.hEvent,MAXTIMEOUT)==WAIT_TIMEOUT)
{
CloseHandle(os.hEvent);
return false;
}
else if ((dwEvtMask & EV_RXFLAG) == EV_RXFLAG)
{
CloseHandle(os.hEvent);
ClearCommError(idComDev,&Errors, &Stat);
return true;
}else
{
CloseHandle(os.hEvent);
return false;
}
}在线程中的代码:if (!m_com.WaitEventChar())
continue;
else
m_com.Read(buf, 1024);
可是现在事件好像不被驱动,我把if (!m_com.WaitEventChar())
continue;去掉就可以收到数据,但是加上就不能收到数据
{
OVERLAPPED os ;
DWORD dwEvtMask,Errors;
COMSTAT Stat; memset( &os, 0, sizeof( OVERLAPPED ));
os.hEvent = CreateEvent( NULL, // no security
TRUE, // explicit reset req
FALSE, // initial event nonsignaled.
NULL ) ; // no name
dwEvtMask = 0 ;
WaitCommEvent(idComDev,&dwEvtMask,&os);
if (WaitForSingleObject(os.hEvent,MAXTIMEOUT)==WAIT_TIMEOUT)
{
CloseHandle(os.hEvent);
return false;
}
else if ((dwEvtMask & EV_RXFLAG) == EV_RXFLAG)
{
CloseHandle(os.hEvent);
ClearCommError(idComDev,&Errors, &Stat);
return true;
}else
{
CloseHandle(os.hEvent);
return false;
}
}在线程中的代码:if (!m_com.WaitEventChar())
continue;
else
m_com.Read(buf, 1024);
可是现在事件好像不被驱动,我把if (!m_com.WaitEventChar())
continue;去掉就可以收到数据,但是加上就不能收到数据
SetCommMask(hCom, EV_RXFLAG);
EV_RXFLAG不是普通字符的响应,是指SetCommState指定的DCB结构的事件字符所以监测EV_RXCHAR这个事件就可以了