多线程下载得到的数据大小不对解决方法
多线程下载得到的数据大小不对
DWORD dwRequest; // 请求下载的字节数
DWORD dwRead; // 实际读出的字节数
dwRequest=BUFFER_MAX;
if(dwRequest>threadTemp->dwTotal)
dwRequest=threadTemp->dwTotal; //threadTemp是一个结构类型指针,成员dwTotal是下载总量
char buffer[BUFFER_MAX];
CFile file;
file.Open((threadTemp->fileName),CFile::modeCreate|CFile::modeNoTruncate|CFile::modeWrite);//创建临时文件
ZeroMemory(buffer,BUFFER_MAX);//初始化字符缓冲区
//测试dwTotal数据是否是对的
CString strto;
strto.Format("%d",threadTemp->dwTotal);
AfxMessageBox(strto);//测试打开临时文件
//--------------------
int test=threadTemp->dwTotal;
while(test)
{
BOOL ReadReturn = InternetReadFile(m_hRequest,
(LPVOID)buffer,
dwRequest,
&dwRead); //GetLastError()可以得到错误信息
if(!ReadReturn){ //查看错误
int dd=GetLastError();
CString strdd;
strdd.Format("%d",dd);
AfxMessageBox(strdd);
break;
}
buffer[dwRead]='\0';
file.Write(buffer,dwRead);
test=test-dwRead;
}
file.Close();
以上是一个线程下载函数,(小弟在设计一个多线程下载的软件),但是有个问题,假设我下载的一个酷我音乐盒软件,大小为9M,分3个线程来下载,结果是,第一个临时文件是9M,第二个是6M,第三个是3M,为什么是这样的呢?求高手指导
------解决方案--------------------
应该是你下载只指定了起始位置, 导致后面所有数据都会下载,
设置好结束地址就可以了
------解决方案--------------------
while(test)
仅当test为0时退出,会不会运行过程中test为负了?
DWORD dwRequest; // 请求下载的字节数
DWORD dwRead; // 实际读出的字节数
dwRequest=BUFFER_MAX;
if(dwRequest>threadTemp->dwTotal)
dwRequest=threadTemp->dwTotal; //threadTemp是一个结构类型指针,成员dwTotal是下载总量
char buffer[BUFFER_MAX];
CFile file;
file.Open((threadTemp->fileName),CFile::modeCreate|CFile::modeNoTruncate|CFile::modeWrite);//创建临时文件
ZeroMemory(buffer,BUFFER_MAX);//初始化字符缓冲区
//测试dwTotal数据是否是对的
CString strto;
strto.Format("%d",threadTemp->dwTotal);
AfxMessageBox(strto);//测试打开临时文件
//--------------------
int test=threadTemp->dwTotal;
while(test)
{
BOOL ReadReturn = InternetReadFile(m_hRequest,
(LPVOID)buffer,
dwRequest,
&dwRead); //GetLastError()可以得到错误信息
if(!ReadReturn){ //查看错误
int dd=GetLastError();
CString strdd;
strdd.Format("%d",dd);
AfxMessageBox(strdd);
break;
}
buffer[dwRead]='\0';
file.Write(buffer,dwRead);
test=test-dwRead;
}
file.Close();
以上是一个线程下载函数,(小弟在设计一个多线程下载的软件),但是有个问题,假设我下载的一个酷我音乐盒软件,大小为9M,分3个线程来下载,结果是,第一个临时文件是9M,第二个是6M,第三个是3M,为什么是这样的呢?求高手指导
------解决方案--------------------
应该是你下载只指定了起始位置, 导致后面所有数据都会下载,
设置好结束地址就可以了
------解决方案--------------------
while(test)
仅当test为0时退出,会不会运行过程中test为负了?