听说使用线程实现idhttp.get是解决程序不假死的最好办法,有人可以把代码贴一下吗
var
url:='http://www.1.com/'
showmessage(idhttp.get(url));怎么用线程实现以上过程,请大家指教。

解决方案 »

  1.   

    创建一个线程,在线成立执行get操作吧,没用过IDHttp
      

  2.   

    const
      WM_HTTPTEXTGOT = WM_USER + 1;THttpThread = class(TThread)
    private
      FHandle: THandle;
      FUrl: string;
      FHttp: TIdHttp;
    protected
      procedure Execute; override;
    public
      constructor Create(AHandle: THandle; AUrl: string); override;
      destructor Destroy; override;
    end;var
      arrResponse: array of Char;
    ........THttpThread.Create(AHandle: THandle);
    begin
      FHttp := TIdHttp.Create(nil);
      FHandle := AHandle;
      FUrl := AURL;
      inherited Create(False);
    end;THttpThread.Destroy;
    begin
      FHttp.Free;
      inherited Destroy;
    end;THttpThread.Execute;
    var
      strReturn: string;
    begin
      FreeOnTerminated := True;
      strReturn := FHttp.Get(FUrl);
      SetLength(arrResponse, Length(strReturn));
      StrPCopy(arrResponse, strReturn);
      //往通知的窗口发个消息,通知接收完成.然后在那个窗口中响应WM_HTTPTEXTGOT消息.访问arrResponse数组,得到结果
      PostMessage(FHandle, WM_HTTPTEXTGOT, 0, 0);
    end;
      

  3.   

    TForm1 = class(TForm)
    .....
    private 
      procedure WMHttpTextGot(var message: TMessage); message WM_HTTPTEXTGOT;
    ....
    end;procedure TForm1.Button1Click(Sender: TObject);
    begin
      THttpThread.Create(Handle, 'www.google.cn');
    end;procedure TForm1.WMHttpTextGot(var message: TMessage);
    begin
      Memo1.Text := arrResponse;
    end;