{
지정 함수를 쓰레드에 실어서 실행시키는 클래스 (델파이 버전)
델파이라고 해서 다를 것은 없습니다.
다만, 델파이와 C++의 약간의 언어적 차이만 손보면 동일하게 동작합니다.
설명은 아래의 팁 지정 함수를 쓰레드에 실어서 실행시키는 클래스를 보시기 바랍니다.
}
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;
type
TForm1 = class(TForm)
Button1: TButton;
Button2: TButton;
procedure Button1Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
procedure TestFunc(Sender: TObject);
end;
//---------------------------------------------------------------------------
{ TRunThread }
TRunThread = class(TThread)
private
OnEvent: TNotifyEvent;
Sender: TObject;
public
constructor Create(event: TNotifyEvent; _sender: TObject);
procedure Execute(); override;
end;
//---------------------------------------------------------------------------
var
Form1: TForm1;
implementation
{$R *.dfm}
//---------------------------------------------------------------------------
{ TRunThread }
constructor TRunThread.Create(event: TNotifyEvent; _sender: TObject);
begin
inherited Create(false);
FreeOnTerminate := true;
OnEvent := event;
Sender := _sender;
end;
procedure TRunThread.Execute;
begin
OnEvent(Sender);
end;
//---------------------------------------------------------------------------
{ Test }
// 요건 쓰레드에 실어서 실행할 함수 입니다.
procedure TForm1.TestFunc(Sender: TObject);
var
c, k, temp: integer;
begin
// 엄청 시간이 걸리는 루틴.
for c := 0 to 1999999998 do begin
k := c;
inc(k);
temp := k;
dec(temp);
k := temp + 1;
end;
Caption := inttostr(k);
Button1.Enabled := true;
end;
// 쓰레드를 생성한후 쓰레드에서 함수를 실행한후 즉시 리턴해 프로그램 실행을 계속한다.
procedure TForm1.Button1Click(Sender: TObject);
var
thread: TRunThread;
begin
//
Button1.Enabled := false;
Caption := '1';
thread := TRunThread.Create(TestFunc, Sender);
end;
procedure TForm1.Button2Click(Sender: TObject);
begin
//
Caption := '하하하';
end;
end.
|