一个读Gps时间的vc程序,在调试状态下能正确执行,但是直接运行却结果不正确,请问

一个读Gps时间的vc程序,在调试状态下能正确执行,但是直接运行却结果不正确,请教
程序比较简单,就是在对话框中建立一个MSCOMM控件(利用向导),然后在对话框onInitDialog()函数中初始化串口设置,在OnCommMscom事件中记录GPS的时间。写入文件,
调试下能够正确读到数据,但是直接运行记录的数据却不正确。
代码如下:
初始化:
BOOL   CComutiDlg::OnInitDialog()  
{
CDialog::OnInitDialog();

if(m_ComPort.GetPortOpen())
{
m_ComPort.SetPortOpen(FALSE);
}
m_ComPort.SetCommPort(1); //选择1号串口
m_ComPort.SetInBufferSize(1024);   //接收缓冲区
m_ComPort.SetOutBufferSize(1024);//发送缓冲区
m_ComPort.SetInputMode(1); //以二进制方式输入
m_ComPort.SetSettings( "9600,n,8,1 "); //设置波特率等参数
//设置为1表示当串口接受缓冲区中有多于或等于1个字符时
//将引发一个关于comExReceive的事件
m_ComPort.SetRThreshold(1);
if(!m_ComPort.GetPortOpen())//如果串口没有打开则打开
m_ComPort.SetPortOpen(TRUE);//打开串口
else
m_ComPort.SetOutBufferCount(0);
m_ComPort.GetInput(); //预读缓冲区以清除残留数据
return   TRUE;     //   return   TRUE   unless   you   set   the   focus   to   a
}
onCommMscom事件
void   CComutiDlg::OnOnCommMscom()  
{

VARIANT   vResponse;
int   k;
if(2   ==   m_ComPort.GetCommEvent())//判断comEvReceive事件是否发生
{
iCount++;
//如果是第一次记录,则记录GPS的时间
if(1   ==   iCount)
{

k   =   m_ComPort.GetInBufferCount();
if(k> 0)
{
m_ComPort.SetInputLen(k);
vResponse   =   m_ComPort.GetInput(); //读取接受到的数据
TCHAR   szBuffer[500];
_stprintf(szBuffer,_T( "%s "),(char*)vResponse.parray-> pvData);
s "),szBuffer);
*******************************************************
FILE   *   myFile   =   0;
myFile   =   fopen( "lifuqiong.dat ", "wb ");
if(myFile)
{
for(int   i=0;i <500;i++)
{
if(0   >   fwrite(&szBuffer[i],1,1,myFile))
{
fclose(myFile);
}
}
fclose(myFile);
}
**************************************************************
SaveData(k,(unsigned   char*)vResponse.parray-> pvData);//保存接受到的数据
}

}
else
{
//DestroyWindow();
CDialog::OnOK();
}
//else
// break;
}
}
其中onCommMscom事件中iCount变量是为了记录响应事件的次数,如果响应一次则记录GPS的时间,否则不记录。两行*****之间的代码是为了测试运行时vResponse.parray-> pvData   的值,发现问题就是在这个值上,但是不知道为什么两种情况下该值不一样,请教大家了。

------解决方案--------------------
调试下能够正确读到数据,但是直接运行记录的数据却不正确。

说明是时间的问题,调试时运行的慢,数据都过来了,所以对。直接时,运行速度快,数据还没过来就读去了,所以错。

k = m_ComPort.GetInBufferCount();
if(k> 0)

这个地方,假如就来了3个数据,k就大于0,你就开始读了,但数据不完全。建议Sleep(1000);