请教一个关于时间的问题
我用VC6.0写了个程序:用来测试串口发过来的两个数据的时间差。在程序按下开始后,就开启串口。
在接收到第一个数据时,就记录下当时的时间。
在接收到第二个数据时,记录下当时的时间。
然后再把两个时间相减,得到它的时间差,并结束串口。
我用单片机每100个ms发一次数据,但是我的程序有时显示时间差为32ms,31ms,有时还为15ms.
请高手指点。
串口接收数据和时间计算程序如下:
DWORD AUXR_time1=0,AUXR_time2=0;
void CTestTimeDlg::OnOnCommMscom()
{
// TODO: Add your control notification handler code here
VARIANT variant_temp;//定义VARIANT变量
COleSafeArray COleSafeArray_temp;//定义COleSafeArray变量
long k,len;//len是用于放置串口数据长度的
BYTE RXdata[2048];
CString strText;
int TimeLong;
if(m_mscom.GetCommEvent()==2)
{
variant_temp =m_mscom.GetInput();//把串口缓冲区里的数据放在变量variant_temp中
COleSafeArray_temp=variant_temp;//把variant变量转换为COleSafeArray变量
len=COleSafeArray_temp.GetOneDimSize();//得到有效数据长度
for(k=0;k<len;k++)
{
COleSafeArray_temp.GetElement(&k,RXdata+k);//转换为BYTE型数组
}
for(k=0;k<len;k++)
{
BYTE bt=*(char*)(RXdata+k);//字符型
strText.Format("%02X ",bt); //将字符以十六进制方式送入临时变量strtemp存放
}
if(iii==0)//接收到第一个数据
{
AUXR_time1=GetTickCount();//读第一个数据时的系统时间
m_auxrdata1=strText;
strText="";
iii=1;
}
else
{//接收到第二个数据
AUXR_time2=GetTickCount();//读系统时间
TimeLong=AUXR_time2-AUXR_time1;//计算两次数据的时间差
m_auxrdata2=strText;//显示接收到的第二数
m_auxrtime.Format("%d",TimeLong);//显示时间值
m_mscom.SetPortOpen(false);//关开串口
iii=0;
}
}
UpdateData(false);
}