<DIV>&nbsp;I&nbsp;use&nbsp;the&nbsp;following&nbsp;code&nbsp;to&nbsp;read&nbsp;data&nbsp;from&nbsp;a&nbsp;geotiff&nbsp;file&nbsp;and&nbsp;do some computing and write&nbsp;it&nbsp;into<BR>&nbsp;a&nbsp;new&nbsp;one.the&nbsp;bands&nbsp;number&nbsp;is&nbsp;6;&nbsp;...<BR>&nbsp;GDALDataset&nbsp;*poSrcDS,*poDstDS;//poSrcDs:the&nbsp;source&nbsp;file,poDstDS:the&nbsp;goal<BR>&nbsp;source&nbsp;GDALRasterBand&nbsp;*poSrcBand,*poDstBand;//poSrcBand:the&nbsp;source<BR>&nbsp;band,poDstBand:the&nbsp;goal&nbsp;band&nbsp;GDALDriver&nbsp;*poDstDriver;<BR>&nbsp;double&nbsp;*m_AdGeoTransform=new&nbsp;double[6];<BR><BR>&nbsp;...<BR>&nbsp;poDstDriver=GetGDALDriverManager()-&gt;GetDriverByName(poSrcDS-&gt;GetDriver()-&gt;G<BR>etDescrition());<BR>&nbsp;poDstDS=poDstDriver-&gt;create(DstFilename,nX,nY,6,GDT_Float32,NULL);<BR>&nbsp;poSrcDS-&gt;GetGeoTransform(m_AdGeoTransform)<BR>&nbsp;poDstDS-&gt;SetGeoTransform(m_AdGeoTransform);<BR>&nbsp;poDstDS-&gt;SetProjection(poSrcDS-&gt;GetProjectionRef());<BR><BR>&nbsp;for(int&nbsp;iBand=0;iBand&lt;6;iBand++)<BR>{<BR>&nbsp;&nbsp;&nbsp;&nbsp;poSrcBand=poSrcDS-&gt;GetRaserBand(iBand+1);<BR>&nbsp;&nbsp;&nbsp;poDstBand=poDstDS-&gt;GetRaserBand(iBand+1);<BR>&nbsp;&nbsp;&nbsp;float&nbsp;*pafScanline;<BR>&nbsp;&nbsp;&nbsp;pafScanline=(float&nbsp;*)CPLMalloc(sizeof(float)*nX;<BR>&nbsp;&nbsp;&nbsp;for(int&nbsp;i=0;i&lt;nY;i++)<BR>&nbsp;&nbsp;{&nbsp;&nbsp;&nbsp;<BR>poSrcBand-&gt;RasterIO(GF_Read,0,0,nX,i,pafScanline,nX,1,GDT_Float32,0,0);<BR>&nbsp;poDstBand-&gt;RasterIO(GF_Write,0,0,nX,i,pafScanline,nX,1,GDT_Float32,0,0);//If&nbsp;I&nbsp;comment&nbsp;this&nbsp;code,the&nbsp;program&nbsp;will&nbsp;be&nbsp;ok.&nbsp;}<BR>&nbsp;}<BR>GDALClose((GDALDatasetH)poDstDS);<BR><BR>When&nbsp;I&nbsp;run&nbsp;my&nbsp;program,CPU&nbsp;is&nbsp;very&nbsp;alway&nbsp;busy,and&nbsp;the&nbsp;program&nbsp;is<BR>&nbsp;blocked,why?<BR></DIV><br><br><span title="neteasefooter"/></span>