반응형
{
지정 함수를 쓰레드에 실어서 실행시키는 클래스 (델파이 버전)
델파이라고 해서 다를 것은 없습니다.
다만, 델파이와 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.
출처 : http://delphi.borlandforum.com/impboard/impboard.dll?action=read&db=del_tip&no=274
반응형
'Programming > Delphi' 카테고리의 다른 글
| Drag Over Event (0) | 2010.06.30 |
|---|---|
| 다른 프로그램 종료시까지 대기하기 (0) | 2010.06.30 |
| [FTP 에러] Invalid PORT Command. (0) | 2010.06.30 |
| 다른 프로그램의 버튼 클릭하기 (0) | 2010.06.30 |
| 확장자의 아이콘과 연결 프로그램 조작 (0) | 2010.06.30 |