![]() |
Re: warten bis Thread keine Jobs mehr hat.....
Variablen (also dessen Inhalt) solltest du im Constructor übergeben (Dafür ist er ja da)
Aber so Threadrelevante Dinge, wie Fenster oder Timer erstellen müssen in execute. |
Re: warten bis Thread keine Jobs mehr hat.....
jup so habe ich es jetzt auch gemacht.....
jetzt merke ich auch erst das alle Threads gleichzeitig laufen bzw. arbeiten :stupid: |
Re: warten bis Thread keine Jobs mehr hat.....
eine frage hätte ich da noch.....
wenn sich ein client beendet wird im thread ondisconnect ausgelöst per syn wird eine methode in der mainform aufgerufen..... wenn ich einen client beende und der inhalt von disconnect wird ausgelöst, friert meine anwendung manchmal ein..... wenn ich den code rausnehme ohne probleme..... dort werden dann auch daten an einen anderen thread übergeben.... kann es sein das meine threads sich irgend wie stören oder ich zu viele syn methoden eingebaut habe..... debuggen ist auch nicht gerade einfach..... |
Re: warten bis Thread keine Jobs mehr hat.....
vielleicht sind die ganzen TCriticalsection mein Problem....
Maches zur Zeit so ...
Delphi-Quellcode:
TMeinThread1 = class(TThread)
private cs : TCriticalsection; public Procedure IrgendEine(str : string); end; TMeinThread1.IrgendEine(str : string); begin cs.enter try flist.add(str); //<- TStringList; finally cs.leave; end; end; TMeinThread2 = class(TThread) private meinthread1 : TMeinThread1; cs : TCriticalsection; fOnProcedure : TProcedure; public Procedure IrgendEine; Property OnProcedure : TProcedure read fOnProcedure write fOnProcedure; Property MeinThread1 : TMeinThread1 read meinthread1; end; TMeinThread2.IrgendEine; begin //mach was synchronize(fOnProcedure); //mach noch was end; //Main //... fMeinThread2.onProcedure := onMeineProcedure; //... TFrmMain.OnMeineProcedure; begin fMeinThread2.MeinThread1.add('text'); //noch irgend was.... end; |
Re: warten bis Thread keine Jobs mehr hat.....
habe jetzt noch ein paar test gemacht.....
ich meine ich habe den fehler gefunden. In einigen Threads deklariere ich die variable für die TCriticalsection unter private der Klasse. Wenn ich aber in der Methode selber eine cs erstelle und freigebe habe ich keine Probleme, so sieht es nach einem Test zumindestens aus.... |
Re: warten bis Thread keine Jobs mehr hat.....
Du darfst nur eine CS für alle Threads haben (bzw. alle die sich zusammen synchronisieren müssen)
|
Re: warten bis Thread keine Jobs mehr hat.....
:shock: jetzt verstehe ich gar nichts mehr, bzw. habe ich es überhaupt verstanden :)
Das heist ich müste eine globale cs für alle Threads haben.... hmmmm |
Re: warten bis Thread keine Jobs mehr hat.....
Für die Threads, welche du gegenseitig synchronisiewren willst, weil du auf dieselben Variablen zugreifst, ja.
Du kannst natürlich mehrere CS haben. Für jede Variable, die du in mehreren Threads nutzt je eine. Oder eben eine für alle. Global definieren geht, ist aber nicht ganz OOP. Du kannst sie auch von dem einen Thread zum anderen im Constructor o.ä. übergeben. |
Re: warten bis Thread keine Jobs mehr hat.....
Zitat:
|
Re: warten bis Thread keine Jobs mehr hat.....
Zitat:
Aber was machst du, wenn du mehrere Threads startest (aus verschiedenen Instanzen)? Ich habe meistens einen kleinen kurzen Thread, den ich starte. Dem übergebe ich sowieso zwei, drei Variablen. Da kann ich ihm auch noch die CS übergeben. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 05:23 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