type
GEvent = class(TThread)
public
procedure Terminate;
procedure Call(Event : GEvent);
constructor Create;
procedure Execute; Override;
end;
TDirection = (DUp, DRight, DDown, DLeft);
EventTitle = class(GEvent)
private
Index : Integer;
Sprite : CSprite;
Terminate : Boolean;
procedure CreateSprite;
procedure MoveCursor(Direction : TDirection);
procedure RefreshCursor;
constructor Create;
destructor Destroy;
public
procedure Execute;
end;
implementation
{ GEvent }
procedure GEvent.Call(Event: GEvent);
begin
Suspend;
// inherited Terminate;
Self := GEvent(Event.ClassType.Create);
end;
constructor GEvent.Create;
begin
inherited Create(True);
end;
destructor GEvent.Destroy;
begin
Terminate;
inherited;
end;
procedure GEvent.Execute;
begin
// inherited;
end;
procedure GEvent.Terminate;
begin
Suspend;
inherited;
end;
{ EventTitle }
constructor EventTitle.Create;
begin
inherited;
Resume;
end;
procedure EventTitle.CreateSprite;
begin
Showmessage('anything');
end;
destructor EventTitle.Destroy;
begin
inherited;
end;
procedure EventTitle.Execute;
begin
inherited;
Synchronize(CreateSprite);
Index := 0; {
while not Terminated do
begin
if GISystem.System.Input.Trigger(KUp) then
MoveCursor(DUp);
if GISystem.System.Input.Trigger(KDown) then
MoveCursor(DDown);
end; }
end;
기본 양식이 InstanceVar := EventTitle.Create
자동으로 스레드는 방법 CreateSprite
에 도달해야 호출, 이상하게 일이되지 않은 것. 나는 그 방법이 실행되지 않는 이유를 알 수 없었다. 응용 프로그램의 기본 형식은 여전히 정상적으로 작동하지만 갑자기 중지되거나 시작하지 않는 것처럼 EventTitle.Execute
처럼 보입니다. 그것은 잘못된 구현 일 수도 있습니다. 그것은 나의 첫번째 MultiThreading 예심이고, 그때 어떤 불일치든지 유감스럽게 생각한다. 누구든지 내가 뭘 잘못했는지 알 수 있니?
OT :'Suspend'와'Resume'을 사용하지 마십시오. 컴파일러가 경고 메시지를 보냈을 때 사용되지 않습니다 ... 스레드를 즉각적으로 다시 시작하여 일시 중지 된 상태로 만들면 많은 도움이되지 않습니다. – TLama
정말. 나는 아이들 스레드에'Resume'을 할 것입니다. 그것을 제거하는 중 ... – Guill
아마 OmniThreadLibrary를 사용하면 TThread의 내부를 파는 것보다 더 쉬울 것입니다 –