现在想做一个实验,从串口发送一个文件,512K大小,每一次要从文件中取64个字节往串口发送,然后要等待串口回0xAA 0x55后才能继续发下一帧数据,并在接收数据的时候进行超时判断,如果10S内没有数据回或回的数据不对,那就重发这一帧数据。然而在VC中,发完一帧数据后总不能用while来等待串口回数据吧!那好像用定时器来等待调度,可以行得通,不过我怎么发现SetTimer中最小的只能到毫秒级,这样发的数据好慢。各位有什么比较好的办法来处理。
//这是设置等待函数,不知道里面的参数对了没
void CSerial::OnWait(DWORD dwWaitTimes)
{
COMMTIMEOUTS CommTimeOuts;CommTimeOuts.ReadIntervalTimeout = 0xFFFFFFFF;
CommTimeOuts.ReadTotalTimeoutMultiplier = dwWaitTimes;
CommTimeOuts.ReadTotalTimeoutConstant = dwWaitTimes;
CommTimeOuts.WriteTotalTimeoutMultiplier = 0;
CommTimeOuts.WriteTotalTimeoutConstant = 5000;SetCommTimeouts( m_hIDComDev, &CommTimeOuts );
}//这是发送等待测试函数
void CSendFile2COMDlg::OnSendTest()
{
// TODO: Add your control notification handler code here
if(!m_Common.IsOpened())
{
OnCloseupCbCom();
}unsigned char ucTemp[] = {0xa5,0x00,0x03,0xc3,0xf2,0x46}; //测试发送的数据
char* cRecvBuff=(char*) malloc(sizeof(char)*100);
memset(cRecvBuff,0x00,100);m_Common.OnSendString((char *)ucTemp,sizeof(ucTemp)); //发送字符串
//while(1)
{
m_Common.OnWait(10000);
m_Common.ReadData(cRecvBuff,100);if ((cRecvBuff[0] == (char)0xe1) && (cRecvBuff[1] == (char)0x00))
{
m_Show = m_Show + "E1 00 ";
UpdateData(FALSE);//break;
}
}
}原本应该是在用OnWait时,程序应该暂时不往下运行,可是在调试的时候,并没有看到程序暂停下,而是继续往下运行,如果不用while,数据收不到。那我应该怎么处理?