AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Programmieren allgemein Delphi Thread Methode Synchronisieren ?

Thread Methode Synchronisieren ?

Ein Thema von SyntaxXx · begonnen am 14. Aug 2014 · letzter Beitrag vom 14. Aug 2014
Antwort Antwort
SyntaxXx

Registriert seit: 14. Dez 2008
328 Beiträge
 
Delphi XE4 Architect
 
#1

Thread Methode Synchronisieren ?

  Alt 14. Aug 2014, 13:53
Hallo zusammen,
nachdem ihr mir bei meinem letzten Problem schon super geholfen habt, habe ich jetzt eine weitere Frage bezüglich Threads.

Und zwar geht es um das Synchronisieren.
Ich weiß, dass man aufjedenfall synchronisieren sollte, wenn man aus einem Thread herraus etwas an der GUI ändern möchte.
Z.B. die Caption eines Labels.

Ich erstelle in meiner Anwendung 2 Threads, die beide etwas über die IdHTTP Komponente aus dem Internet laden sollen.
Dazu habe ich meine Threadklasse um eine Methode erweitert.

Delphi-Quellcode:
TThread1 = class(TThread)
  protected
    procedure Execute; override;
  private
    procedure UpdateInformation;
    content: String;
  end;
In der Prozedur "UpdateInformation" erstelle ich eine IdHTTP Komponente.
Wenn ich nun 2 Threads erstelle, bedeutet das dann, dass jeder Thread seine eigene Komponente hat oder nicht?

Angenommen, ich lade ein der Prozedur nur den Quelltext einer Seite und speichere diesen in der Variablen "content", müsste ich dann synchronisieren?
Eigentlich hätte doch jeder Thread seine eigene IdHTTP Komponente und eine eigene Variable "content" ?!
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.851 Beiträge
 
Delphi 11 Alexandria
 
#2

AW: Thread Methode Synchronisieren ?

  Alt 14. Aug 2014, 13:59
Wo ist die HTTP Komponente deklariert als lokale Variable in der Methode UpdateInformation?
Markus Kinzler
  Mit Zitat antworten Zitat
SyntaxXx

Registriert seit: 14. Dez 2008
328 Beiträge
 
Delphi XE4 Architect
 
#3

AW: Thread Methode Synchronisieren ?

  Alt 14. Aug 2014, 14:46
In der Methode selbst.

Da du aber ja geziehlt nachfragst, gehe ich davon aus, dass es einen Unterschied macht ^^
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

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

AW: Thread Methode Synchronisieren ?

  Alt 14. Aug 2014, 15:55
Als privates Feld (Variable) in der TThread1-Klasse, oder als lokale Variable in der Thread-Methode ... da hat dann jeder Thread seine eigene Variable und kann auch seine eigene TidHTTP-Instanz darin ablegen.


Zum Syncronisieren braucht man übrigens keine externen Variablen mehr.
Man kann beim Synchronize-Aufruf zwar immernoch keine Parameter übergeben, aber in anonymen Methoden kann man auf lokale Variablen zureifen.

Delphi-Quellcode:
proccedure TThread1.Execute;
var
  H: TidHttp; // kann auch in TThread1-Private deklariert sein, wenn man z.B. im Constuctor damit schon was machen/einrichten will
  S: string;
begin
  H := TidHttp.Create;
  try
    S := H.LoadFormIrgendwo;
    Synchronize(procedure
      begin
        MyForm.MyLabel.Caption := S;
      end);
  finally
    H.Free;
  end;
end;
Kurze Prozeduren, welche man nicht auch noch an anderen Stellen benötigt (ebenfalls dort drüben aufrufen will), die kann man so inline deklarieren.
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  Mit Zitat antworten Zitat
Benutzerbild von Sir Rufo
Sir Rufo

Registriert seit: 5. Jan 2005
Ort: Stadthagen
9.454 Beiträge
 
Delphi 10 Seattle Enterprise
 
#5

AW: Thread Methode Synchronisieren ?

  Alt 14. Aug 2014, 19:46
Diese/meine Antwort aus deiner vorherigen Frage sollte das doch beantworten ... eigentlich
Kaum macht man's richtig - schon funktioniert's
Zertifikat: Sir Rufo (Fingerprint: ‎ea 0a 4c 14 0d b6 3a a4 c1 c5 b9 dc 90 9d f0 e9 de 13 da 60)
  Mit Zitat antworten Zitat
Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

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:18 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