Klar, das mit dem Neuschreiben von Terminate hab ich verstanden (auch warum
).
Aber inwiefern kümmert sich der Timer selbst um die Events?
Delphi-Quellcode:
type TMeinthread = class(TThread)
private
Timer : TTimer;
procedure TimerEvent(Sender : TObject);
public
procedure Execute; override;
procedure Terminate;
end;
implementation
procedure TMeinthread.Execute;
var
Msg : TMsg;
begin
Timer:=TTimer.Create(nil);
Timer.OnTimer:=TimerEvent;
while GetMessage(Msg, 0, 0, 0) do
begin
// Was nun?
// case Msg of
// WM_TIMER: TimerEvent(Timer); //
// end;
// ???
end;
Timer.Free;
end;
procedure TMeinthread.TimerEvent(Sender : TObject);
begin
ShowMessage('Hallo'); // Wird nie ausgeführt ohne die case-Struktur
end;
procedure TMeinthread.Terminate;
begin
PostThreadMessage(Self.ThreadID, WM_QUIT, 0, 0);
inherited Terminate;
end;
Das Event kommt an, allerdings muss ich selbst darauf reagieren, oder?
Also z.B. mit der passenden case-Struktur?
Das heißt wenn ich eigene Objekte mit eigenen Events benutze, müsste ich beim Erstellen des Objekts vom Thread die ThreadID übergeben und das Ereigis wird dann druch PostThreadMessage ausgelöst?