![]() |
Thread Methode Synchronisieren ?
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:
In der Prozedur "UpdateInformation" erstelle ich eine IdHTTP Komponente.
TThread1 = class(TThread)
protected procedure Execute; override; private procedure UpdateInformation; content: String; end; 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" ?! |
AW: Thread Methode Synchronisieren ?
Wo ist die HTTP Komponente deklariert als lokale Variable in der Methode UpdateInformation?
|
AW: Thread Methode Synchronisieren ?
In der Methode selbst.
Da du aber ja geziehlt nachfragst, gehe ich davon aus, dass es einen Unterschied macht ^^ |
AW: Thread Methode Synchronisieren ?
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:
Kurze Prozeduren, welche man nicht auch noch an anderen Stellen benötigt (ebenfalls dort drüben aufrufen will), die kann man so inline deklarieren.
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; |
AW: Thread Methode Synchronisieren ?
![]() |
Alle Zeitangaben in WEZ +1. Es ist jetzt 10:00 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-2025 by Thomas Breitkreuz