Programming/Delphi

지정 함수를 쓰레드에 실어서 실행시키는 클래스 (델파이 버전)

통통만두 2010. 6. 30. 15:34
반응형
{ 
지정 함수를 쓰레드에 실어서 실행시키는 클래스 (델파이 버전) 

델파이라고 해서 다를 것은 없습니다. 
다만, 델파이와 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

반응형