![]() |
Re: CurrentThread in Delphi
@OregonGhost
ruf Enter und Leave ziemlich oft auf. Hab aber nun rausgefunden dass dies wohl nicht am Enter und Leave liegen kann das es einfach zufällig mal länger mal nicht so lange dauert. Zudem brauche ich nun das Thread-Objekt auch nicht mehr. Da ich dazu nun eine anderen weg gegangen bin. |
Re: CurrentThread in Delphi
Das klingt eher danach, als dass durch das häufige Enter/leave der Thread mal auf das Enter'n warten muss, weil wer anders dies auch gerade macht. Da ist eher eine Überschneidung vermutbar..
|
Re: CurrentThread in Delphi
Eine überschneidung kann eigentlich nicht sein, da dies auch passiert wenn nur ein Thread daran arbeitet.
|
Re: CurrentThread in Delphi
Was muss den synchronisiert werden. Manchmal hilft auch eine einfache Message
(btw. Synchronize von TThread arbeitet zwar mit criticalSection, aber nicht im Moment des synchronisierens - hmm schwierig zu erklären - ach egal ) |
Re: CurrentThread in Delphi
Also folgendes Problem haben wir,
wir haben eine Komponente die eine Datenbankverbindung mit DBExpress/Firebird aufmacht und auf diese DbVerbindung mit mehreren Threads zugreift. Nun ist uns aufgefallen dass wenn mehr als ein Thread auf die Datenbank zugreift sich die Datenbankverbindung verabschiedet. Also wollten wir nun, wenigstens als Workaround (was nun auch funktioniert) unsere Aufrufe Synchronisieren. Das eigentliche Problem ist dass uns die Datenbankverbindung abschmiert |
Re: CurrentThread in Delphi
Da kann man wohl nix machen, wenn eh alles auf diese Datenbank warten muss.
Ich weis ja nicht,was diese Threads noch machen. Aber vielleicht ghilft ein zusätzlicher Thread, der eine Liste mit den aktuell abzuarbeitenden SQL-Befehlen hat und diese ausführt und die Antworten wieder zurück an die Threads verteilt. Aber das geht auch nur, wenn die Antworten der Datenbank nicht kritisch sind für den weiteren Ablauf (und das wird wahrscheinlich der Fall sein). |
Re: CurrentThread in Delphi
Ja genauso ist es,
ausserdem habe ich keine Lust den kompletten Code der Fremdkomponente durchzugehen um dies zu beheben. Aber ist doch immer das gleiche mit den Fremdkomponenten, man sollte von anfang an alles selber machen. Wenn das dann nur immer nicht so schwer und vor allem Zeitaufwendig wär. :wink: |
Re: CurrentThread in Delphi
So wie ich das lese, klingt es so, als würdet ihr mehrere Threads und nur ein Datenbankzugriffsobjekt haben. Dabei handelt es sich um eine Fremdkomponente, die nicht multi-threading fähig ist.
Könntet ihr nicht versuchen, für jeden Thread ein eigenes Verbindungsobjekt zu erzeugen? Bzw. wenn das die Datenbank zu sehr belasten würde könntet ihr mit einer poolbasierten Lösung arbeiten. |
Re: CurrentThread in Delphi
@Chewie
Das ist ne gute Idee, werde diese mal im Auge behalten. Der Umbau wird leider nur ein bisschen kompliziert, da die Fremdkomponente den Thread erstellt und die Datenbankverbindung von mir kommt. Aber ich hab da schon eine Idee wie ich dies umbauen kann. Danke für den Tipp. Werde wieder hier Posten wenns funktioniert hat. Kann aber ein bisschen dauern, da ich im moment wieder an anderen sachen arbeite. |
Re: CurrentThread in Delphi
Und - hat´s funktioniert? ;-)
Ich weiß, Du bist mir 2 Jahre voraus, aber ich will jetzt genau das selbe Problem angehen. Mein Überlegung: Jedem Thread eine eigene IBDatabase zuweisen, um in EINER Anwendung gleichzeitige Zugriffe über MEHRERE Threads auf eine FB-EMBEDDED-Datenbank zu ermöglichen. Ist das ein gangbarer Weg? Stahli |
Alle Zeitangaben in WEZ +1. Es ist jetzt 06:01 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