本站提倡有节制游戏,合理安排游戏时间,注意劳逸结合。

【-79源码和补码】【solrj源码】【妖怪源码】delphi 多线程 源码_delphi多线程实例

2024-11-15 01:35:37 来源:时尚 分类:时尚

1.delphi 谁帮我翻译下这段代码——高分

delphi 多线程 源码_delphi多线程实例

delphi 谁帮我翻译下这段代码——高分

       //是多线i多-79源码和补码个基于多线程的模拟浏览器的 Get 和Post 方法的类,具体我也不大清楚,,

       //也只能大概说说了.

       unit web;

       interface

       uses

       Classes,IdHTTP,SysUtils,IdCookieManager,IdMultipartFormData

       ,windows;

       //类的声明

       type

       TWeb = class(TThread)

       private

       protected

       procedure Execute; override; //重写父类TThread的Exeecute方法.

       public

       mode: Integer; //标志位:根据这个判断是Get还是Post

       url: string; //Url地址

       idhttp: TIDHttp; //Indy 的http组件

       sl: TStringList;

       mpfDS: TIdMultiPartFormDataStream; //用这个控件实现 Stream的提交方法的.

       flag: Boolean; //标志位,代码没有读懂,不知道是控制什么状态的

       err,html: string;

       stm: TMemoryStream;

       constructor create; //构建函数

       end;

       implementation

       //构造函数 ,全是初始化声明的类,没啥好说的.

       constructor TWeb.create;

       begin

       idhttp := TIDHttp.Create(nil);

       idhttp.CookieManager := TIDCookieManager.Create(idhttp);

       sl := TStringList.Create();

       mpfDS := TIdMultiPartFormDataStream.Create();

       stm := TMemoryStream.Create();

       FreeOnTerminate := True; //这也是个标志位: 当中断时候释放

       inherited Create(True);

       end;

       //重写父类TThread的Exeecute方法.

       procedure TWeb.Execute;

       begin

       while not Terminated do

       begin

       Sleep();

       if Suspended then continue; //不懂,估计是多线程的同步处理?

       flag := True;

       err := '';

       html := '';

       //根据mode判断执行的功能 1 :Get文本 2:Get 流 3 提交数组ts是上面定义的一个数组 4 提交Stream,估计是提交类似,文件一类的东西

       Case mode of //1:get text 2:get stream 3:post ts 4:post mpfDS

       1:

       begin

       try

       html := idhttp.Get(url); //这个用Indy的idhttp 获取URL地址的内容.文本方式.

       except

       on e:exception do begin

       flag := False;

       err := e.Message;

       end;

       end;

       end;

       2:

       begin

       stm.Clear();

       try

       idhttp.Get(url,stm); //用Indy的idhttp 获取URL内容 ,Stream方式

       except

       on e:exception do begin

       flag := False;

       err := e.Message;

       end;

       end;

       end;

       //也是用Indy的idhttp实现提交功能, 没时间详细些了,lz可以查看INDY组件IDHTTP的控件的详细使用方法.

       //可以hi我再进行交流...

       3:

       begin

       try

       html := idhttp.Post(url,sl);

       except

       on e:exception do begin

       flag := False;

       err := e.Message;

       end;

       end;

       end;

       4:

       begin

       try

       html := idhttp.Post(url,mpfDS);

       except

       on e:exception do begin

       flag := False;

       err := e.Message;

       end;

       end;

       end;

       5:

       begin

       idhttp.Request.ContentType := 'application/x-www-form-urlencoded';

       try

       html := idhttp.Post(url,stm);

       except

       on e:exception do begin

       flag := False;

       err := e.Message;

       end;

       end;

       end;

       end;

       if (html<>'') and (Pos('utf',LowerCase(idhttp.Response.ContentType))>0) then

       html := Utf8Decode(html);

       Suspended := True;

       end;

       idhttp.Free();

       sl.Free();

       mpfDS.Free();

       stm.Free(); //释放...

       end;

       end.

相关推荐
一周热点