쓰레드를 사용하지 않고 DHTML Edit 컴포넌트를 사용했을때는
에러없이 잘돌아가는데..
쓰레드를 사용할경우 에러가 납니당...
현제 VB에서 지원하지 않는 몇가지 문제점을 해결하기 위해
델파이로 단위 테스트를 하며 컨버젼 작업을 수행하려하는데..
문서, URL 페이지 로딩시 CUP부하가 많아 쓰레드 처리를 하려는데
델파이에서 에러가 나네용...
혹시나 해서 JAVA++에서 만들어 보았더니.. 잘 돌아가는군요..
샘플 소스를 올립니다.. 프로젝트 파일은 첨프 하겠습니다..
문제점, 해결방안을 지적 해주십시요.
델파이에서는 5.0, 6.0에서 테스트 해보았는데..
5.0에서는 에러처리는 하지 않는데, 결과(로딩)이 안나오네요.
6.0에서는 엑세스 바이올레이션 에러가 처리 됩니다.
감사합니다.
=============================
Source (.pas)
=============================
unit Test;
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
ComCtrls, OleCtrls, DHTMLEDLib_TLB, StdCtrls, Buttons;
type
TForm1 = class(TForm)
Label1: TLabel;
Edit1: TEdit;
BitBtn1: TBitBtn;
DHTMLEdit1: TDHTMLEdit;
ProgressBar1: TProgressBar;
Animate1: TAnimate;
procedure BitBtn1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
procedure ActionView();
end;
TDHTML_Thread = class(TThread)
private
protected
public
procedure Execute; override;
end;
TProBar_Thread = class(TThread)
private
protected
public
procedure Execute; override;
end;
var
Form1: TForm1;
implementation
{$R *.DFM}
procedure TForm1.ActionView();
begin
DHTMLEdit1.LoadURL(Edit1.Text);
end;
procedure TForm1.BitBtn1Click(Sender: TObject);
begin
if (Edit1.Text <> '') then
begin
TProBar_Thread.Create(false);
TDHTML_Thread.Create(false);
end
else
begin
ShowMessage('Url을 입력하세요');
ActiveControl := Edit1;
end;
end;
// DHTML Edit Thread //
procedure TDHTML_Thread.Execute;
begin
Form1.ActionView();
end;
// Progress Bar Thread //
procedure TProBar_Thread.Execute;
var
i : integer;
begin
for i:=0 to 100000 do
begin
Form1.ProgressBar1.Position := i;
end;
for i:=100000 downto 0 do
begin
Form1.ProgressBar1.Position := i;
end;
end;
end.