Delphi Programming Forum
C++Builder  |  Delphi  |  FireMonkey  |  C/C++  |  Free Pascal  |  Firebird
볼랜드포럼 BorlandForum
 경고! 게시물 작성자의 사전 허락없는 메일주소 추출행위 절대 금지
델파이 포럼
Q & A
FAQ
팁&트릭
강좌/문서
자료실
컴포넌트/라이브러리
FreePascal/Lazarus
볼랜드포럼 홈
헤드라인 뉴스
IT 뉴스
공지사항
자유게시판
해피 브레이크
공동 프로젝트
구인/구직
회원 장터
건의사항
운영진 게시판
회원 메뉴
북마크
델마당
볼랜드포럼 광고 모집

델파이 팁&트릭
Delphi Programming Tip&Tricks
[274] 지정 함수를 쓰레드에 실어서 실행시키는 클래스 (델파이 버전)
김태선 [cppbuilder] 5435 읽음    2007-07-21 11:08
{
지정 함수를 쓰레드에 실어서 실행시키는 클래스 (델파이 버전)

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

+ -

관련 글 리스트
274 지정 함수를 쓰레드에 실어서 실행시키는 클래스 (델파이 버전) 김태선 5435 2007/07/21
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.