![]() |
Thread.Terminated erzeugt unbekannter Bezeichner
Hallo Leute,
ich stolpere über das Problem, das bei mir die Eigenschaft Terminated für Threads fehlt. :idea: In der Doku ist es vorhanden ,jedoch beim complilieren bekomme ich einen Fehler (unbekannter Bezeichner). Die Eigenschaft Suspended gibt es und die funktioniert auch. Woran könnte dies liegen? Witzigerweise ist die Property in Classes.pas enthalten. :gruebel: |
Re: Thread.Terminated erzeugt unbekannter Bezeichner
Zitat:
Wenn du diese Frage beantworten kannst, dann sollte sich dein Problem erklären. |
Re: Thread.Terminated erzeugt unbekannter Bezeichner
Hallo!
Du versuchst nicht zufällig .Terminated außerhalb Deiner abgeleiteten Komponente TThread zu verwenden? Grüßle! |
Re: Thread.Terminated erzeugt unbekannter Bezeichner
Hallo Sunlight7,
ja genau. Ich habe das Problem mit dem Protected jetzt auch geblickt. Wie kann ich trotzdem prüfen, ob ein Thread bereits beendet ist? |
Re: Thread.Terminated erzeugt unbekannter Bezeichner
Die einfachste Version ist, einfach bei deiner Thread-Klasse unter public ein "property Terminated;" schreiben. Aber Vorsicht: "Terminated" wird nicht gesetzt wenn du nicht persönlich die Terminate-Methode des Threads aufgerufen hast. Du müsstest also in einen try/finally Block in der Execute-Methode im finally auch Terminate aufrufen.
|
Re: Thread.Terminated erzeugt unbekannter Bezeichner
Ich würde dafür eher das Ereignis
![]() ![]() |
Re: Thread.Terminated erzeugt unbekannter Bezeichner
Hallo Sunlight7,
danke für den Hinweis mit dem OnTerminate. Ich schau es mir nochmal genau an. Im Prinzip benötige ich es jedoch nicht, da ich FreeOnTerminate:=false verwende. Hallo jbg, danke für den Hinweis mit dem Finally. Hatte ich natürlich glatt vergessen. :lol: |
Re: Thread.Terminated erzeugt unbekannter Bezeichner
Da Du damit scheinbar erste Schritte machst, hast Du TThread in eine neue Klasse abgeleitet?
|
Re: Thread.Terminated erzeugt unbekannter Bezeichner
Hallo Sunlight7,
ja, ich habe eine Klasse davon abgeleitet.Gib es noch etwas zu beachten?
Delphi-Quellcode:
unit HttpGetThreads;
interface uses Classes, IdBaseComponent, IdComponent,IdTCPConnection,IdTCPClient, IdHTTP,IdObjs;//Indy type TMyHttpThreads = class(TThread) private IdHTTP: TIdHTTP; ContentStream:TStringStream; FURL:string; FTerminated:Boolean; procedure loadComplete; public property ActualURL: String read FURL; property Terminated:Boolean read FTerminated; protected procedure Execute; override; end; implementation uses JobQueueMultiThread;//Main procedure TMyHttpThreads.Execute; var loop:Integer; begin try FTerminated:=False; IdHTTP:=TIdHTTP.Create; while ((JobQueue.Joblist.Count>0) and Terminated=false) do begin; FURL:=JobQueue.Joblist.Strings[0]; JobQueue.Joblist.Delete(0); ContentStream:= TStringStream.Create(toEOF); try IdHTTP.Get(FURL,ContentStream); except on e:EIdHTTPProtocolException do begin JobQueue.Joblist.Add(FURL); end; end; ContentStream.Seek(0, soFromBeginning); Synchronize(loadComplete); ContentStream.Destroy; end; finally FTerminated:=True; IdHTTP.Destroy; if Assigned (ContentStream) then ContentStream.Destroy; end; end; procedure TMyHttpThreads.loadComplete; begin JobQueue.ThreadResult(ContentStream); end; end. |
Re: Thread.Terminated erzeugt unbekannter Bezeichner
Aua:
Delphi-Quellcode:
=
while ((JobQueue.Joblist.Count>0) and Terminated=false) do begin;
Delphi-Quellcode:
Einmal ohne "=false" und einmal ohne ";" :wink:
while ((JobQueue.Joblist.Count>0) and not Terminated) do begin
Wenn in dem try finally Block eine Exception auftritt, wird Dein Programm mit ner Fehlermeldung beendet. :wink: 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! |
Alle Zeitangaben in WEZ +1. Es ist jetzt 10:33 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz