Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Komponenten in Threads verwenden ja/nein ? (https://www.delphipraxis.net/82718-komponenten-threads-verwenden-ja-nein.html)

ozz 18. Dez 2006 18:34


Komponenten in Threads verwenden ja/nein ?
 
Hallo zusammen,
ich habe mal eine Frage zum Einsatz von Threads.Ist es sinnvoll, Komponenten direkt in Threads zu verwenden, wie in diesem Beispiel?
Oder spricht etwas dagegen? Wenn ja was?
Danke für die Info!

Delphi-Quellcode:
unit HttpGetThreads;

interface

uses
  Classes,
  IdBaseComponent, IdComponent, IdTCPConnection,IdTCPClient, IdHTTP,IdObjs;//Indy


type
  THttpGetThread = class(TThread)

  private
    { Private-Deklarationen }
  IdHTTP: TIdHTTP;
  ContentStream:TStringStream;
  procedure loadComplete;
  public
    url:string;
  protected
    procedure Execute; override;
  end;

implementation
uses Unit1;//Main

procedure THTTPGetThread.Execute;
begin
  { Thread-Code hier einfügen }
  IdHTTP:=TIdHTTP.Create;
  ContentStream:= TStringStream.Create(toEOF);
  try
  IdHTTP.Get(URL,ContentStream);
  except
  end;
  Synchronize(loadComplete);
  IdHTTP.Destroy;
  ContentStream.Free;
end;

procedure THTTPGetThread.loadComplete;
begin
Form1.parseDoc(ContentStream);
end;

end.

Sunlight7 18. Dez 2006 18:39

Re: Komponenten in Threads verwenden ja/nein ?
 
Hallo!

Wenn die Komponenten die Du verwendest auf die VCL zugreifen, dann hast Du ein Problem :mrgreen:
Von nem Thread heraus solltest Du nur mit Synchronize auf die VCL zugreifen und die Kompos werden das wohl kaum machen. :wink:

Grüßle!

PS: Ach: "Komponenten in Threads verwenden ja/nein ?"
Nein :mrgreen:

SirThornberry 18. Dez 2006 18:49

Re: Komponenten in Threads verwenden ja/nein ?
 
in deinem Fall "Ja"
da du keine VCL-Komponenten verwendest.

radekj 18. Dez 2006 19:41

Re: Komponenten in Threads verwenden ja/nein ?
 
Es kann sein das die http komponente eine Message-Schleife braucht, was thread automatisch nicht hat.
Deswegen wird Sie immer auf ein Connect warten oder auf Daten etc...

ciao
Radek

SirThornberry 18. Dez 2006 19:49

Re: Komponenten in Threads verwenden ja/nein ?
 
TIdHttp funktioniert definitiv im Thread. Hab ich selbst schon im Thead verwendet ohne Probleme.

radekj 18. Dez 2006 19:53

Re: Komponenten in Threads verwenden ja/nein ?
 
Nicht immer,

versuche dich gegen einen HTTP Stream zu verbinden, dann geht es im thread nicht !

Aber das ist nur eine Besonderheit.

Radek

ozz 18. Dez 2006 21:55

Re: Komponenten in Threads verwenden ja/nein ?
 
Vielen Dank!
Also, wenn ich mal zusammenfassen kann: :warn:
Solange ich keine VCL verwende, habe ich kein Problem und kann die Komponenten verwenden.

Ist es wie in dem Beispiel sinnvoll bei jedem execute die Instanz von den IDHTTP zu erzeugen oder gibt es noch eine elegantere/bessere/sinnvoller Lösung? :gruebel:

radekj 18. Dez 2006 22:14

Re: Komponenten in Threads verwenden ja/nein ?
 
Hängt von dem wie oft du das Thread erzeugst.

Ich persönlich verwende Synchronize nicht sonder abeite über Messages (SendMessag and so on),
das was.

ciao
radekj

Sunlight7 18. Dez 2006 22:35

Re: Komponenten in Threads verwenden ja/nein ?
 
Die Komponenten, die Du verwendest dürfen dann aber auch nicht auf die VCL zugreifen :warn: :zwinker:


Alle Zeitangaben in WEZ +1. Es ist jetzt 09:25 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