下面的代码是通过一个while循环来读取缓冲区中的数据来实现接受数据的(ctNonBlocking),但是接收数据的时候CPU的占用率达到了100%,经过检查是WHILE循环造成的!由于接收网络包的是速度比CPU的速度慢的多,所以绝大部分时间循环是在空转的,也就是CPU在空转!请高人指点一下,帮我将这段代码优化一下!或给点建议!  
procedure  TdmClient.DownLoadsFile(ASubCmd:  Word);  
var  
   ReceiveSize,TotalSize,ActualRcvFileSize:Integer;  
   Rec:Pointer;  
   FileStream:TFileStream;  
   ResHd:TResHeader;  
   FileName1:String;  
   FileName2:String;  
begin  
   FillChar(ResHd,NRESH_LEN,0);  
   self.ChkDir(Universal.DOWNLOAD_PATH);  
   FileName1:=Universal.APP_PATH+Universal.DOWNLOAD_PATH+IntToStr(ASubCmd);  
   FileStream:=TFileStream.Create(FileName1,fmCreate  or  fmOpenWrite);  
   try  
       if  self.cskClient.Socket.ReceiveBuf(ResHd,NRESH_LEN)<>NRESH_LEN  then  
       begin  
           FileStream.Free;  
           Exit;  
       end;  
       TotalSize:=ntohl(ResHd.DataLen);//要下载的文件长度         
       while  FileStream.Size<TotalSize  do  
       begin  
           ReceiveSize:=Min(TotalSize-FileStream.Size,self.cskClient.Socket.ReceiveLength);  
           if  ReceiveSize  >  0  then  
           begin  
               Rec:=AllocMem(ReceiveSize);  
               ActualRcvFileSize:=self.cskClient.Socket.ReceiveBuf(Rec^,ReceiveSize);  
               FileStream.Write(Rec^,ActualRcvFileSize);  
               FreeMem(Rec);  
           end;  
           delay(300);  
       end;  
   finally  
       FileStream.Free;  
   end;  
end;