Aua:
while ((JobQueue.Joblist.Count>0) and Terminated=false) do begin;
=
while ((JobQueue.Joblist.Count>0) and not Terminated) do begin
Einmal ohne "=false" und einmal ohne ";"
Wenn in dem try finally Block eine
Exception auftritt, wird Dein Programm mit ner Fehlermeldung beendet.
Falls das nicht gewollt is, dann auf try except umarbeiten.
Sonst seh ich auf den 1. Blick nix falsches.
Edit: Auf den 2. doch noch was, verwende .Free anstatt .Destroy oder noch besser, wenns Dein Delphi kennt, FreeAndNil!