Hier mal ein paar Codeschnipsel:
Delphi-Quellcode:
type
TmyThread = class(TThread)
public
EventWait: TEvent; // Event zum Abbruch eines Wartens zwischen zwei Abfragen beim Terminate
constructor Create(CreateSuspended: Boolean);
destructor Destroy; override;
procedure Terminate;
[...]
protected
procedure Execute; override;
[...]
end;
[...]
constructor TmyThread.Create(CreateSuspended: Boolean);
begin
inherited;
EventWait:=TEvent.Create(nil,true,false,'');
[...]
end;
destructor TmyThread.Destroy;
begin
FreeAndNil(EventWait);
[...]
inherited;
end;
procedure TmyThread.Terminate;
begin
inherited;
EventWait.SetEvent;
end;
procedure TmyThread.Execute;
begin
// Vorbereitungen, irgendwas machen
[...]
// Die Schleife, die alle paar Sekunden irgendwas machen soll,
// bis der Thread beendet wurde.
while (not Terminated) do begin
[...]
// mach was
[...]
// Warten, bis die Zeit abgelaufen ist oder das Event extern
// ausgelöst (z.B. durch "Terminate", dort das SetEvent
if not terminated then
EventWait.WaitFor(sekunden*1000);
// Event zurücksetzen für den evtl. nächsten Durchgang
EventWait.Reset
end;
// ggf. Aufräumen
[...]
end;
Ich hoffe, die Doku im Quellcode liefert dir schon genug Ansätze, sonst frag ruhig.
Bis denn
Bommel