안녕하세요...
온라인의 웹의 내용을 가지고 오는 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;
sleep걸어도 무방하다면 걸어두는 편이 좋을 듯