程序运行CPU占用率过高,只是一个度读写得的程序,但是不明白为什么,代码如下

CFileDialog file_dlg(TRUE);

file_dlg.m_ofn.lpstrTitle="读取数据对话框  write by wang";
file_dlg.m_ofn.lpstrFilter="Text File(*.dat)\0*.dat\0All File(*.*)\0*.*\0\0";
if(IDOK==file_dlg.DoModal())
{
   CFile read_file(file_dlg.GetFileName(),CFile::modeRead);
   unsigned int file_length=read_file.GetLength();
   unsigned char *pbuf;
   unsigned int i,j,u,TotalNum,Pos=0;
   pbuf=new unsigned char[file_length];
   read_file.Read(pbuf,file_length);
   read_file.Close();
   TotalNum=file_length/204;
   unsigned int *TagTable=new unsigned int[TotalNum];
   memset(TagTable,0,TotalNum);


   for(i=0;i<file_length;i++)
   {
      if((pbuf[i]==0x46)&&(pbuf[i+1]==0x54)&&(pbuf[i+204]==0x24)&&(pbuf[i+205]==0x24))
      {
         TagTable[Pos++]=i;
      }
   }
   CString PointSaveCurrent;
   CString PointSave;
   PointSave=_T("");
   PointSaveCurrent=_T("");
   float *vertex=new float[(Pos)*200];
   float *angle=new float[Pos];
   double pi=3.1415926;
   unsigned int point=0;

   for(i=0;i<Pos;i++)
   {
        j=TagTable[i];
        PointSaveCurrent.Format("第%d帧:\r\n",i+1);
        PointSave+=PointSaveCurrent;
        for(u=0;u<100;u++)
        {
          point=pbuf[u*2+j+4]+pbuf[u*2+j+5]*256;
          vertex[u*2+i*200]=point*sin((50.0-u)/180*pi);
          vertex[u*2+1+i*200]=point*cos((50.0-u)/180*pi);
          angle[i]=(pbuf[j+206]*256.0+pbuf[j+207])/100.0;
          PointSaveCurrent.Format("x:%f   y:%f   角度:%f\r\n",vertex[u*2+i*200],vertex[u*2+1+i*200],angle[i]);
          PointSave+=PointSaveCurrent;
        }
       //memset(point,0,100);
   }
   CFile file("data.txt",CFile::modeCreate|CFile::modeWrite);
   file.Write(PointSave,strlen(PointSave));
   file.Flush();
   file.Close();
   delete[] vertex;
   delete[] angle;
   delete[] TagTable;
   delete[] pbuf;
   vertex=NULL;
   angle=NULL;
   TagTable=NULL;
   pbuf=NULL;
}

循环当中需要响应系统消息,这个不知道在你的开发工具中是否可以使用或有替代:Application->ProcessMessages(); // 在长时间循环中响应消息

估计是你的对话框等阻塞了,所以造成UI线程卡死。CPU占用很高

以调试方式运行程序,中断,看停在哪一行。

里面进行了Pos*100 次的sin 和 cos 计算,这个在Pos 很大的时候,且机器配置比较低的时候比较消耗资源~
一般的文件读取和写入操作,不怎么耗时间。MFC 读写文件有自己的缓存机制!
====> DWORD start = GetTickCount();
for(i=0;i<Pos;i++)
{
j=TagTable[i];
PointSaveCurrent.Format("第%d帧:\r\n",i+1);
PointSave+=PointSaveCurrent;
for(u=0;u<100;u++)
{
point=pbuf[u*2+j+4]+pbuf[u*2+j+5]*256;
vertex[u*2+i*200]=point*sin((50.0-u)/180*pi);
vertex[u*2+1+i*200]=point*cos((50.0-u)/180*pi);
angle[i]=(pbuf[j+206]*256.0+pbuf[j+207])/100.0;
PointSaveCurrent.Format("x:%f y:%f 角度:%f\r\n",vertex[u*2+i*200],vertex[u*2+1+i*200],angle[i]);
PointSave+=PointSaveCurrent;
}
//memset(point,0,100);
}

====> DWORD duration = GetTickCount() - start;
看看duration 的值是多少~