//
// Thread class 정의 예제
//
unit RainbowThread;
interface
uses
Classes, SysUtils, ExtCtrls;
type
TRainbowThread = class(TThread)
private
{ Private declarations }
FShape : TShape;
protected
procedure Execute; override;
public
Constructor Create(Shape:TShape);
end;
implementation
{ TRainbowThread }
procedure TRainbowThread.Execute;
begin
Repeat
FShape.Brush.Color:=
Round(Random(256)) shl 16 +
Round(Random(256)) shl 8 +
Round(Random(256));
Sleep(200);
Until Terminated = True; //=====> Terminated 변수의 검사로 진행여부를 결정하도록 처리 한다
end;
Constructor TRainbowThread.Create(Shape:TShape);
Begin
FShape:= Shape; //=====> 초기화 처리는 Inherited Create() 함수 보다 먼저 기입 한다
Inherited Create(True);
End;
end.
//--------------------------------------------------//
// 사용법 1
//--------------------------------------------------//
// 생성 부분
// 전달인자가 True 일때는 Resume 호출로 실행 시켜야 한다
Thread1:= Thread.Create( True );
// 재개
Thread1.Resume;
// 일시 중지
Thread1.Suspend;
// 실행 종료
Thread1.Terminate;
// 실행 종료 대기
Thread1.WaitFor;
// 제거 부분
Thread1.Free; // 또는 FreeAndNil( Thread1 );
--< 주의 >-----------------------------------------
Resume 을 호출하지 않은 상태에서
Suspend를 호출하면 프로그램에 문제가 생겨서
프로그램이 정지 한다
//--------------------------------------------------//
// 사용법 2
//--------------------------------------------------//
// 생성 부분
// 전달인자가 False 이면 바로 실행 한다
// 전달인자가 False 일때 Suspend 함수를 호출하면
// 프로그램에 문제가 생겨서 프로그램이 정지 한다
Thread1:= Thread.Create( False );
// 제거 부분
Thread1.Free; // 또는 FreeAndNil( Thread1 );
//--------------------------------------------------//
// 사용법 3
//--------------------------------------------------//
// 생성 부분
// 전달인자는 실행 시작 여부
// True = Resume 함수 호출로 시작
// False = 바로 시작
Thread1:= Thread.Create( True );
// 실행 종료 되면 자동 제거
Thread1.FreeOnTerminate := True;
// 실행 종료
Thread1.Terminate;
--< 주의 >---------------------------------------------
FreeOnTerminate := True; 로 지정한 후에는
Suspend 또는 Free 함수를 호출하면
프로그램에 문제가 생겨서 프로그램이 정지 한다