Q&A

  • Indy TIdHTTP + 쓰레드시 문제점???

안녕하세요...
온라인의 웹의 내용을 가지고 오는 TIdHTT컴포넌트를 이용을 해서  웹의 소스를 받아오는것을
쓰레드로 이용을 하여 가지고 오는 테스트를 하고 있습니다.
[소스를 첨부를 합니다.]

[문제점]
일정한 CPU 점유율과 그리고 Windows작업관리자에서 보면 메모리가 계속해서 메모리가 증가를 하는
현상이 발생이 됩니다.
쓰레드를 이용을 하지 않고 타이머로 일정시간으로 간격으로 웹의 소스를 가지고 오면
별 문제가 없습니다만 쓰레드를 이용을 하니까 문제가 발생이 됩니다.


procedure TForm1.Button1Click(Sender: TObject);
begin
  // 쓰레드 이용
  Thread := HttpThread.Create(Memo1, 'http://www.daum.net');
  Thread.Terminate;
  Thread.WaitFor;
end;


procedure TForm1.Button2Click(Sender: TObject);
var
  URL, TmpStr: string;
begin
  // 원래 할려고 하는 job은 다음의 내용입니다. 이를 위의 내용처럼 쓰레드로
     처리를 할려고 하는 것 뿐입니다.
     아래 내용을 타이머로 실행을 하면 일정 미만의 시스템 리소르를 이용합니다.
  URL := 'http://www.daum.net';
  TmpStr := HTTP.Get(URL);
  Memo1.Lines.Clear;
  Memo1.Lines.Add(TmpStr);
end;


[쓰레드 소스]
Unit2.pas

constructor HttpThread.Create(MEMO: TMemo; URL: string);
begin
  inherited Create(true);

  FHTTP := TIdHTTP.Create(nil);
  FMEMO := MEMO;
  FURL := URL;
  Priority := tpNormal;
  FreeOnTerminate := True;
  Resume; // DlgThread.Resume; // start thread

end;

procedure HttpThread.Destory;
begin
    //
    //
end;

procedure HttpThread.Execute;
var
  Tmp: string;
begin
  { Place thread code here }
  try
    try
      FTmp := FHTTP.Get(FURL); // 메모리  점유율이 헉 상당한데...멈추지 않고 계속되네....
      Synchronize(Sync); // 호출을 하는 UI Form 과 통신을 하기 위해서
    finally
      if Assigned(FHTTP) then
        FreeAndNil(FHTTP);
    end;
  except
    FException := ExceptObject as Exception;
    Synchronize(ShowError);
  end;

end;

procedure HttpThread.ShowError;
begin
  //
  Application.ShowException(FException);
end;

procedure HttpThread.Sync;
begin
  //
  FMEMO.Lines.Add(FTmp);
  //ShowMessage(FTmp);

end;
2  COMMENTS
  • Profile
    이중철 2005.02.05 01:25
    일반적으로 Sleep걸지 않나요
    sleep걸어도 무방하다면 걸어두는 편이 좋을 듯
  • Profile
    이강수 2005.02.05 02:17

      repeat

        FTmp := FHTTP.Get(FURL); // 메모리  점유율이 헉 상당한데...멈추지 않고 계속되네....
        //FTmp := '';
        beep(200, 200);
        sleep(100);
        Application.ProcessMessages;
        Synchronize(Sync); // 호출을 하는 UI Form 과 통신을 하기 위해서

        if Assigned(FHTTP) then
          FreeAndNil(FHTTP);

      until Terminated;

    어린식으로 해도 여전히 메모리가 증가하는 문제는 그대로 안고 있습니다.
    무엇이 문제인지 알수 가 없습니다.
    ....