AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Object-Pascal / Delphi-Language Delphi Thread.Terminated erzeugt unbekannter Bezeichner
Thema durchsuchen
Ansicht
Themen-Optionen

Thread.Terminated erzeugt unbekannter Bezeichner

Ein Thema von ozz · begonnen am 6. Jan 2007 · letzter Beitrag vom 7. Jan 2007
Antwort Antwort
Seite 1 von 2  1 2      
ozz

Registriert seit: 26. Jun 2005
131 Beiträge
 
#1

Thread.Terminated erzeugt unbekannter Bezeichner

  Alt 6. Jan 2007, 17:42
Hallo Leute,
ich stolpere über das Problem, das bei mir die Eigenschaft Terminated für Threads fehlt. 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.
  Mit Zitat antworten Zitat
jbg

Registriert seit: 12. Jun 2002
3.483 Beiträge
 
Delphi 10.1 Berlin Professional
 
#2

Re: Thread.Terminated erzeugt unbekannter Bezeichner

  Alt 6. Jan 2007, 18:06
Zitat von ozz:
Witzigerweise ist die Property in Classes.pas enthalten.
Gegenfrage: Was bedeutet die Sichtbarkeit private, protected und public/published?
Wenn du diese Frage beantworten kannst, dann sollte sich dein Problem erklären.
  Mit Zitat antworten Zitat
Benutzerbild von Sunlight7
Sunlight7

Registriert seit: 17. Sep 2006
Ort: Sonnensystem, Zentral
1.522 Beiträge
 
Delphi 5 Standard
 
#3

Re: Thread.Terminated erzeugt unbekannter Bezeichner

  Alt 6. Jan 2007, 18:12
Hallo!

Du versuchst nicht zufällig .Terminated außerhalb Deiner abgeleiteten Komponente TThread zu verwenden?

Grüßle!
Windows: Ja - Microsoft: Nein -> www.ReactOS.org
  Mit Zitat antworten Zitat
ozz

Registriert seit: 26. Jun 2005
131 Beiträge
 
#4

Re: Thread.Terminated erzeugt unbekannter Bezeichner

  Alt 6. Jan 2007, 18:36
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?
  Mit Zitat antworten Zitat
jbg

Registriert seit: 12. Jun 2002
3.483 Beiträge
 
Delphi 10.1 Berlin Professional
 
#5

Re: Thread.Terminated erzeugt unbekannter Bezeichner

  Alt 6. Jan 2007, 18:53
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.
  Mit Zitat antworten Zitat
Benutzerbild von Sunlight7
Sunlight7

Registriert seit: 17. Sep 2006
Ort: Sonnensystem, Zentral
1.522 Beiträge
 
Delphi 5 Standard
 
#6

Re: Thread.Terminated erzeugt unbekannter Bezeichner

  Alt 6. Jan 2007, 20:34
Ich würde dafür eher das Ereignis Hier im Forum suchenOnTerminate empfehlen, damit kollidierst Du dann auch nicht wenn Hier im Forum suchenFreeOnTerminate True ist.
Windows: Ja - Microsoft: Nein -> www.ReactOS.org
  Mit Zitat antworten Zitat
ozz

Registriert seit: 26. Jun 2005
131 Beiträge
 
#7

Re: Thread.Terminated erzeugt unbekannter Bezeichner

  Alt 6. Jan 2007, 20:54
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.
  Mit Zitat antworten Zitat
Benutzerbild von Sunlight7
Sunlight7

Registriert seit: 17. Sep 2006
Ort: Sonnensystem, Zentral
1.522 Beiträge
 
Delphi 5 Standard
 
#8

Re: Thread.Terminated erzeugt unbekannter Bezeichner

  Alt 6. Jan 2007, 21:10
Da Du damit scheinbar erste Schritte machst, hast Du TThread in eine neue Klasse abgeleitet?
Windows: Ja - Microsoft: Nein -> www.ReactOS.org
  Mit Zitat antworten Zitat
ozz

Registriert seit: 26. Jun 2005
131 Beiträge
 
#9

Re: Thread.Terminated erzeugt unbekannter Bezeichner

  Alt 6. Jan 2007, 22:30
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.
  Mit Zitat antworten Zitat
Benutzerbild von Sunlight7
Sunlight7

Registriert seit: 17. Sep 2006
Ort: Sonnensystem, Zentral
1.522 Beiträge
 
Delphi 5 Standard
 
#10

Re: Thread.Terminated erzeugt unbekannter Bezeichner

  Alt 6. Jan 2007, 23:14
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!
Windows: Ja - Microsoft: Nein -> www.ReactOS.org
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 00:26 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz