-
-
[求助][求助][求助]编写程序时遇到的问题
-
发表于: 2015-7-16 17:06 2555
-
在编写远控程序上传文件功能时,可以用两段不同代码:第一段虽然速度较快,但是不稳定,执行功能时,点击或拖动窗口都会卡住,程序无响应而异常终止,第二段虽然有些慢,但比较稳定,代码如下:
第一段代码:
第二段代码:
第一段代码不健壮的原因在哪,怎么改呢
第一段代码:
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; //记录发送剩余长度 } }
第一段代码不健壮的原因在哪,怎么改呢
[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课
赞赏
看原图
赞赏
雪币:
留言: