Damit das mit dem Event auch klappt, habe ich folgende Zeile in der Hauptunit (Beitrag 2) eingefügt. Ansonsten kann ich Event in einer Ableitung nicht sehen.
Delphi-Quellcode:
public
property Event: TEvent read FEvent write FEvent;
ExecuteTimed also. Ok. Ich habe währenddessen ein bisschen rumprobiert um zu sehen wie der Thread reagiert je nachdem was ich mache.
Mit dem Event-Property funktioniert dann auch das hier
Delphi-Quellcode:
procedure TTestThread.ExecuteTimed;
var
res: TWaitResult;
begin
while not Terminated do
begin
res := Event.WaitFor(Interval); // also z.B. 1000
case res of
wrSignaled:
TThread.Synchronize(nil,
procedure
begin
showmessage('Signaled'); // Wird beispielsweise aufgerufen, wenn ich außen <Thread-Instanz>.Terminate; ausführe
end);
wrTimeout:
TThread.Synchronize(nil,
procedure
begin
showmessage('Timeout'); // Wird immer aufgerufen, wenn oben das WaitFor vorbei ist AUßER es gab vorher wrSignaled, wrAbandoned oder wrError.
end);
wrAbandoned:
Terminate;
wrError: {Fehler loggen}
;
end;
end;
TThread.Synchronize(nil,
procedure
begin
showmessage('Thread Ende');
end);
end;
Was genau wrSignaled macht habe ich aber noch nicht herausgefunden.