首页
社区
课程
招聘
[求助][求助][求助]编写程序时遇到的问题
发表于: 2015-7-16 17:06 2550

[求助][求助][求助]编写程序时遇到的问题

2015-7-16 17:06
2550
在编写远控程序上传文件功能时,可以用两段不同代码:第一段虽然速度较快,但是不稳定,执行功能时,点击或拖动窗口都会卡住,程序无响应而异常终止,第二段虽然有些慢,但比较稳定,代码如下:

第一段代码:
float m = 0;
int n;
int p;
int o;
float l = 0;
char* Buf = new char[CHUNK_SIZE];              //CHUNK_SIZE是一个宏,为1024*32
m_pro.SetRange(0,100);                                //设置进度条范围
for(;m < FileLen;)                                            //读取总长度等于文件长度时,循环终止
{
  p = file.Read(Buf,CHUNK_SIZE);             //用p记录读取长度
  n = 0;
  while(n < p)                                            //读取内容全部发送时,循环终止
  {
    o = send(server,&Buf[n],p,0);        //o记录发送长度
    n += o;                                           
  }
        m += p;
  l =m / FileLen ;
  l = 100*l;
  m_pro.SetPos((int)l);                              //设置进度条
}


第二段代码:
nChunkCount = FileLen / CHUNK_SIZE;         //计算出要发送的次数
if(FileLen/CHUNK_SIZE)
  nChunkCount++;
m_pro.SetRange(0,nChunkCount);                //设置进度条范围
m_pro.SetStep(1);                                         //设置进度条步长
char* Buf = new char[CHUNK_SIZE];             //申请缓存
for(int i=0;i<nChunkCount;i++)
{
  m_pro.StepIt();
  int nLeft = CHUNK_SIZE;                        //nLeft本次读取长度
  if(nLeft+1 == nChunkCount)
  nLeft = FileLen - CHUNK_SIZE*(nChunkCount - 1);
  file.Read(Buf,nLeft);                               //读取文件到缓存

  int ret;
  int idx = 0;
  while(nLeft>0)                                       //读取的全部发送时,循环终止
  {
          ret = send(server,&Buf[idx],nLeft,0);     //ret记录本次发送长度
          if(ret == SOCKET_ERROR)
    {
      AfxMessageBox("上传文件发生错误!");
    }
    idx += ret;                                     //idx,记录已发送长度
    nLeft -= ret;                               //记录发送剩余长度
  }
}


第一段代码不健壮的原因在哪,怎么改呢

[招生]科锐逆向工程师培训(2024年11月15日实地,远程教学同时开班, 第51期)

收藏
免费 0
支持
分享
最新回复 (0)
游客
登录 | 注册 方可回帖
返回
//