DWORD WINAPI CommWatchProc1(LPVOID lpParameter)
{
while(m_bCom1Open==true)
{
DWORD dwBytesRead=1024;
DWORD dwEvtMask=0;
OVERLAPPED READ_OS;
//存储读到的数据
char lpInBuffer[1024];
COMSTAT ComStat;
DWORD dwErrorFlags;
//保存串口数据的长度
DWORD dwLength;
SetCommMask( hCom1, EV_RXCHAR|EV_TXEMPTY );//有哪些串口事件需要监视?
WaitCommEvent( hCom1, &dwEvtMask, 0 );// 等待串口通信事件的发生
if ((dwEvtMask & EV_RXCHAR) == EV_RXCHAR)
{
::ClearCommError(hCom1,&dwErrorFlags,&ComStat);
dwLength=ComStat.cbInQue; //输入缓冲区有多少数据?
if (dwLength> 0)
{
BOOL fReadStat;
dwBytesRead=min(dwBytesRead,dwLength);
fReadStat=ReadFile(hCom1,lpInBuffer,dwLength,&dwBytesRead,&READ_OS);
if (!fReadStat)
{
if(GetLastError()==ERROR_IO_PENDING)
{
GetOverlappedResult(hCom1,&READ_OS,&dwBytesRead,TRUE);
}
} }
}
} return 0;
}检测得到写入串口数据的长度,但是没法写进lpInBuffer,希望有人能解
{
while(m_bCom1Open==true)
{
DWORD dwBytesRead=1024;
DWORD dwEvtMask=0;
OVERLAPPED READ_OS;
//存储读到的数据
char lpInBuffer[1024];
COMSTAT ComStat;
DWORD dwErrorFlags;
//保存串口数据的长度
DWORD dwLength;
SetCommMask( hCom1, EV_RXCHAR|EV_TXEMPTY );//有哪些串口事件需要监视?
WaitCommEvent( hCom1, &dwEvtMask, 0 );// 等待串口通信事件的发生
if ((dwEvtMask & EV_RXCHAR) == EV_RXCHAR)
{
::ClearCommError(hCom1,&dwErrorFlags,&ComStat);
dwLength=ComStat.cbInQue; //输入缓冲区有多少数据?
if (dwLength> 0)
{
BOOL fReadStat;
dwBytesRead=min(dwBytesRead,dwLength);
fReadStat=ReadFile(hCom1,lpInBuffer,dwLength,&dwBytesRead,&READ_OS);
if (!fReadStat)
{
if(GetLastError()==ERROR_IO_PENDING)
{
GetOverlappedResult(hCom1,&READ_OS,&dwBytesRead,TRUE);
}
} }
}
} return 0;
}检测得到写入串口数据的长度,但是没法写进lpInBuffer,希望有人能解
BOOL f;
f = ReadFile(p->m_hCom,buffer,comState.cbInQue,&data,&over);
if(!f)
{
BOOL m;
m = GetOverlappedResult(p->m_hCom,&over,&written,true);
while(!m)
{
if(GetLastError() == ERROR_IO_PENDING)
{
m = GetOverlappedResult(p->m_hCom,&over,&written,true);
}
}
}