各位好:
     小弟写了一个小程序:将一个文本文件按列分别存入不同文件中(次序不能乱)!
程序能运行但性能显示cpu利用率接近100%,而且任务管理器显示“未运行”。有人提议用多线程解决,由于小弟对这方面不是很了解,请各位高手赐教!比较急!!!今天程序就要用了!!!!!!请赐教!for(k=0;k<len/i;k++)
{ m_SourceFile.Seek(k*(i+2),CFile::begin);
for(hh=1;hh<=m;hh++)
{

        name=_ltoa(hh,buff,10);
name+=_T("_");
if (!destFile1.Open(_T(newpath + name+ m_SourceFile.GetFileTitle()+".obj"),  
CFile::modeReadWrite | 
// CFile::shareDenyNone        |
CFile::modeNoTruncate       |
// CFile::shareCompat          |
CFile::typeBinary     , &ex)) {
TCHAR szError[1024];
ex.GetErrorMessage(szError, 1024);
::AfxMessageBox(szError);
m_SourceFile.Close();
return 1;
}
destFile1.Seek(k,CFile::begin);

if(i%8)//l=i%8
{
if(hh!=m)//hh文件的个数。。m=i%8或i%8+1  ->位数整的前几个文件处理方式
{
             dwRead = m_SourceFile.Read(mbuffer, 8);
       
     ybuffer[0]=BinaryToDecimal(mbuffer);

      destFile1.Write(ybuffer,1);
  destFile1.Close();
}
else
{
         dwRead=m_SourceFile.Read(mbuffer,l);//l为余数
int t;
t=l;
do{
mbuffer[++t]='0';
}while(t<8);
ybuffer[0]=BinaryToDecimal(mbuffer);
             destFile1.Write(ybuffer,1);
  destFile1.Close();
}
/* for(int t=0;t<8-l;t++)
{
mbuffer[l+t]='0';
}
ybuffer[0]=BinaryToDecimal(mbuffer);
             destFile1.Write(ybuffer,1);
  destFile1.Close();
}*/


}
else
{ dwRead = m_SourceFile.Read(mbuffer, 8);
       
ybuffer[0]=BinaryToDecimal(mbuffer);

destFile1.Write(ybuffer,1);

        destFile1.Close(); 
}

     }
//if((len/i)>(i/8))
//{
pProgress.SetRange(0, len/i);
// Set the position
pProgress.SetPos(k);
//}} // close source  m_SourceFile.Close();

解决方案 »

  1.   

    改起来很麻烦,以两句说不清楚啊,你的考虑是不是顺序操作(并行的可以用多线程)还有数据(对象)共享访问,还得加锁,最简单的办法是把这些代码从UI中分离出来加到另一个线程中去,这样就解放出UI了
      

  2.   

    而且你这里面都是文件操作,用了多线程效率会很低的,要解决还得用内存映射文件hh,buff,mbuffer,ybuffer........据我观察你这里面的所有数据类型都的加锁访问,这样效率真是太低了,还是现在的效率高啊,只是你将他从UI线程中分离出来就可以了,UI访问这些数据时在加索,这样效率会很高
      

  3.   

    在这里不还改啊
    发给我,我给你改啊
    [email protected]