同步读写串口设置超时无效
HANDLE hCom;
//hCom = CreateFile(_T("COM4"), GENERIC_READ | GENERIC_WRITE, 0, NULL, OPEN_EXISTING,
FILE_ATTRIBUTE_NORMAL, NULL);
if(hCom==INVALID_HANDLE_VALUE)
{
MessageBox(_T("打开串口失败!"));
return;
}
//……配置串口
GetCommState(hCom,&dcb);
//获取外部配置的值
dcb.BaudRate=_tstoi(strBaudRate);
dcb.ByteSize=_tstoi(strDataBit);
dcb.Parity=_tstoi(strParityCheck);
dcb.StopBits=_tstoi(strStopBit);
SetCommState(hCom,&dcb);
SetupComm(hCom, 1024, 1024);//接收缓冲区和发送缓冲区的大小可通过SetupComm函数来设置。
PurgeComm(hCom, PURGE_TXABORT | PURGE_RXABORT | PURGE_TXCLEAR | PURGE_RXCLEAR);
//PurgeComm函数终止所有的后台读写操作并清空接收缓冲区和发送缓冲区:
//设置超时:
COMMTIMEOUTS to;
memset(&to, 0, sizeof(to));
to.ReadIntervalTimeout = 1000;
to.ReadTotalTimeoutMultiplier=500;
to.ReadTotalTimeoutConstant=5000;
to.WriteTotalTimeoutMultiplier=500;
to.WriteTotalTimeoutConstant=2000;
SetCommTimeouts(hCom, &to);
DWORD dwWritenSize = 0;
char strBuffer[20];
memset(strBuffer,0,20);
strBuffer[0]=0x0f;
strBuffer[1]=0x01;
strBuffer[2]=0x01;
strBuffer[3]=0x00;
strBuffer[4]=0x00;
strBuffer[5]=0x00;
strBuffer[6]=0x00;
strBuffer[7]=0x00;
strBuffer[8]=0x00;
strBuffer[9]=0x00;
strBuffer[10]=0x00;
strBuffer[11]=0x00;
strBuffer[12]=0x00;
strBuffer[13]=0x00;
strBuffer[14]=0x00;
strBuffer[15]=0x00;
strBuffer[16]=0x00;
strBuffer[17]=0x00;
strBuffer[18]=0x02;
strBuffer[19]=0xf0;
BOOL bRet = WriteFile(hCom,strBuffer,20,&dwWritenSize,NULL);//一共写入20个字节
if (!bRet)
{
MessageBox(_T("写入串口失败!"));
return;
}
PurgeComm(hCom, PURGE_TXABORT | PURGE_RXABORT | PURGE_TXCLEAR | PURGE_RXCLEAR);
//PurgeComm函数清空串口的输入输出缓冲区
DWORD dwReadSize = 0;
char readBuffer[20];
memset(readBuffer,0,20);
bRet=ReadFile(hCom,readBuffer,20,&dwReadSize,NULL);
if (!bRet)
{
return;
}
//关闭串口
CloseHandle(hCom);
}
问题:即使设置了超时,但在实际读取串口时,程序卡在那里,整个程序无法运行。是不是设置的超时没有起作用?
系统为windows xp,调试环境visual c++ 2008