Vorallem in Bezug auf XE2 würde ich eher zu der TThread-Klasse empfehlen.
Weniger nahezu direkt auf die
WinAPI loszugehn.
Und derartige
TFNThreadStartRoutine(@Thread)
unsichere Typecastes würde ich besser auch noch vermeiden.
Das Mehr an
OOP kann ja nicht Schaden und eine unbehandelte
Exception in der Threadprozedur würde nicht gleich die ganze Anwendung zum verrecken bringen.
Windows beendet Programme, wenn irgendein Thread mit einer
Exception beendet wird, aber die TThread-Klasse fängt sowas netter Weise ab.
Test:
Delphi-Quellcode:
function MyThreadFunc(Parameter: Pointer): Integer;
begin
raise Exception.Create('
Fehler');
end;
procedure TForm1.FormCreate(Sender: TObject);
var
ThreadID: LongWord;
begin
BeginThread(
nil, 0, MyThreadFunc, 0, NORMAL_PRIORITY_CLASS, ThreadId);
end;
Die neue TThread-Klasse bietet auch die Möglichkeit eine Prozedur oder anonyme Methode als Thread laufen zu lassen, also innerhalb einer vordefinierten TThread-Instanz, ohne daß man selber von TThread ableiten muß.
Tipp:
Wozu eigentlich das DateTimeToUnix?
Sleep und UnixTime passt logisch gesehn nicht wirklich zusammen.
- Sleep =
Dauer in
Millisekunden
- UnixTime =
Zeit seit Datum in Sekunden
Nimmt man z.B. iNextRun als TDataTime, dann könnte man es z.B. so machen
Delphi-Quellcode:
Sleep(MilliSecondsBetween(Now, iNextRun));
// oder notfalls
if iNextRun > Now then
Sleep(MilliSecondsBetween(Now, iNextRun));