델파이 프로시저/함수를 스레드(Thread)로 실행
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.
'Delphi > 클래스' 카테고리의 다른 글
시스템 정보 가져오기 (0) | 2023.06.15 |
---|---|
클래스란? (0) | 2023.06.05 |
쓰레드 추가설명 (0) | 2022.03.23 |
익명함수+스레드를 활용한 간단한 스레드 사용 방법 (0) | 2022.01.24 |
멀티스레드 GUI 동기화 (0) | 2022.01.14 |
댓글