반응형
{ 지정 함수를 쓰레드에 실어서 실행시키는 클래스 (델파이 버전) 델파이라고 해서 다를 것은 없습니다. 다만, 델파이와 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 |