Einzelnen Beitrag anzeigen

Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.071 Beiträge
 
Delphi 12 Athens
 
#8

AW: Thread aus Thread starten (Thread startet nicht)

  Alt 1. Feb 2012, 23:05
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));
Neuste Erkenntnis:
Seit Pos einen dritten Parameter hat,
wird PoSex im Delphi viel seltener praktiziert.

Geändert von himitsu ( 1. Feb 2012 um 23:10 Uhr)
  Mit Zitat antworten Zitat