关于多线程里TidHTTP的 一个问题,搞很久了,请大家帮忙看看

tmdsleep 2013-11-03 05:14:06
我写的是一个获取网页源码的程序,用来更新网站的资源的,其他的不说了,说重点。

在一个制定TXT里 每行都有一个网址,创建线程后,吧这些网址 逐行的传递到线程里,然后线程函数下载源码。。具体线程函数代码:

//后台线程工作函数 ///////////////////////////////////////////////////////////
function MyThreadFun(Param: PChar): Integer; stdcall;
var
htpCltLoc: TIdHTTP;
urlStr, webBuf, tmpFile,htmFile: string;
webFile : TextFile;
downok:Boolean;
begin
//得到本线程的下载地址
urlStr := StrPas(Param);

DateTimeToString(tmpFile,'ddsszzz',Now);
htmFile := '1' + tmpFile + '.tmp';

//初始化网页控件并获取网页内容
downok:=True;
htpCltLoc := TIdHTTP.Create(nil);
while downok do
begin
try
webBuf := htpCltLoc.Get(urlStr);
AssignFile(webFile, htmFile);
Rewrite(webFile);
Write(webFile, webBuf);
CloseFile(webFile);
if FileExists(htmFile) then downok:=False;
except
end;
Sleep(1000);//下载失败的休息1秒再下载
end;
htpCltLoc.Free;
//运行打开
Sleep(1000);
try
ShellExecute(0, nil, pchar(htmFile), nil, nil, SW_SHOWNORMAL);
except
SendMessage(ghandle, WM_FILE_END, 0, 0);
Result := 0;
end;
//调用线程返回
Sleep(1000);
SendMessage(ghandle, WM_FILE_END, 0, 0);
Result := 0;
end;


其中我也做了判断,看是否下载后保存了文件,没有的话,继续下载,但是再实际操作中,发现了问题,就是在服务器检测,前几行的一般都能下载下来,但是后面的源码还没有下载完毕,在HFS里 看到正在下载了一部分,程序就退出了,所有下载链接全部中断,我的判断是,没有下载完成,然后就发送了结束线程的消息,所以主程序退出了。但是小弟我是在不知道咋修改了,我改成单线程后,代码是一样的,就是把这个线程函数改为 过程procedure,也就是说下载完第一个网址后,再下载第二个,不是同时下载了,就没有问题。

请各位赐教
...全文
308 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
tmdsleep 2013-11-04
  • 打赏
  • 举报
回复
引用 2 楼 ydtuiguang 的回复:
现成!!!!!
?????
tmdsleep 2013-11-04
  • 打赏
  • 举报
回复
引用 1 楼 ydtuiguang 的回复:
不用这么麻烦了。 现在线程里下载。可以进度条。 http://www.baidu.com/s?ie=utf-8&bs=delphi+UrlDownloadToFile+%E6%94%AF%E6%8C%81%E8%BF%9B%E5%BA%A6%E6%9D%A1&f=8&rsv_bp=1&rsv_spt=3&wd=delphi+TFileDownLoadThread&rsv_n=2&rsv_sug3=1&inputT=458 http://hi.baidu.com/brightsea/item/fba2db406ab6df2211ee1e7a
这个我试验过,我下载的是网页源码,这个对源码下载不好用
ydtuiguang 2013-11-03
  • 打赏
  • 举报
回复
现成!!!!!
ydtuiguang 2013-11-03
  • 打赏
  • 举报
回复
不用这么麻烦了。 现在线程里下载。可以进度条。 http://www.baidu.com/s?ie=utf-8&bs=delphi+UrlDownloadToFile+%E6%94%AF%E6%8C%81%E8%BF%9B%E5%BA%A6%E6%9D%A1&f=8&rsv_bp=1&rsv_spt=3&wd=delphi+TFileDownLoadThread&rsv_n=2&rsv_sug3=1&inputT=458 http://hi.baidu.com/brightsea/item/fba2db406ab6df2211ee1e7a

1,593

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 网络通信/分布式开发
社区管理员
  • 网络通信/分布式开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧