wininet 多任务下载实现有关问题

wininet 多任务下载实现问题!
现在有一个listctrl 里面有下载路径和下载的文件名
我想通过获取列表中的checkbox被选中的所有项 
然后进行单线程下载。
同时进行最多3个下载任务。

疑问:
1.当任务数大于3的时候不知道如何进行处理。
2.线程处理不知道如何进行
3.如何退出下载后再次开始下载的时候能续传。

上网也看了些关于wininet的资料,可是自己还是没办法写出来

因为之前没做过这方面的,第一次接触,还请各位高手多多指点。

能给出demo是再好不过了,谢谢各位了。


------解决方案--------------------
不懂,帮你顶起
------解决方案--------------------
URLDownloadToFile()
------解决方案--------------------
开线程,每个线程调用WinInet API等socket来通信下载文件
断点续传需要自己保存上次下载文件位置。
------解决方案--------------------
以前写过一个用API (Wininet)下载的工程,我的做法是先得到网络文件的大小,如果接收到的字节数等于网络文件大小,就说明下载完成了
不过现在我改用socket写下载了,比用API效率高很多,给你看一下用API写的部分代码,希望对你有所帮助
//同步方式建立会话
hSession=InternetOpen(AfxGetAppName(),INTERNET_OPEN_TYPE_PRECONFIG,NULL,NULL,0);
if (hSession==NULL)
{
errorMsg=_T("Error:Session!");
return FALSE;
}
//建立连接
for (int i= 0; i<pFileObj->nTry;i++)
{
hConnect=InternetConnect(hSession,hostName,
INTERNET_DEFAULT_HTTP_PORT,
NULL,NULL,
INTERNET_SERVICE_HTTP,0,0
);
if (hConnect != NULL) break;

}
if (hConnect==NULL)
{
errorMsg=_T("Error:Connect");
return FALSE;
}
//初始化下载请求
//LPCWSTR acceptTypes = L"*/*";
LPCSTR acceptTypes = _T("*/*");
hRequest=HttpOpenRequest(hConnect,_T("GET"),fileName,
_T("HTTP/1.1"),NULL,
&acceptTypes,
INTERNET_FLAG_RELOAD,0
);
if (hRequest==NULL)
{
errorMsg=_T("Error:Request!");
return FALSE;
}
Sleep(500);
//发送请求
if (!HttpSendRequest(hRequest,NULL,0,NULL,0))
{
errorMsg=_T("Error:Send Request!");
return FALSE;
}
//得到文件大小
char fileSize[128] = {0};
DWORD buflen = 100;
BOOL bRet = FALSE;
bRet = HttpQueryInfo(hRequest,HTTP_QUERY_CONTENT_LENGTH,static_cast<LPVOID>(fileSize),&buflen,NULL);
if (!bRet)
{
errorMsg=_T("Error:GetWebFileSize!");
return FALSE;
}
endPos = _ttol(fileSize);

//设定文件读写指针
if (InternetSetFilePointer(hRequest,beginPos,NULL,FILE_BEGIN,0) == -1)
{//不支持断点续传
downFile->Remove(fileSavePath);
if (!InitDownFile())
return FALSE;
}
//开始下载
try
{
DWORD dwRead=0; //实际得到的字节数
LONG dwTotalRead=doneSize; //本次已下载的总字节数
//开始文件读写
byte* buffer=new byte[DWREQUEST];
while (dwTotalRead < endPos)
{
if (!InternetReadFile(hRequest,buffer,DWREQUEST,&dwRead))
{
break;
}
if (dwRead==0)
{
continue;
}
downFile->Write(buffer,dwRead);
//------------------------------------------------------
dwTotalRead+=dwRead;
}
delete [] buffer;

if (dwTotalRead >= endPos)
{
pFileObj->strDownLoadInfo.push_back(_T("下载完成..."));
}
else
{
pFileObj->strDownLoadInfo.push_back(_T("下载失败,请稍后重试..."));
}
嘿嘿,记得加分啊

------解决方案--------------------
UP~~~~~~~~~~~~~~~~~~~~~~~~~
------解决方案--------------------
可能因为一个帖子问题太多,而楼主这方面基础薄弱,一时很难说明白。
------解决方案--------------------
探讨
可能因为一个帖子问题太多,而楼主这方面基础薄弱,一时很难说明白。