![]() |
CurrentThread in Delphi
Hi,
vielleicht weiß von euch jemand ob es ein Äquivalent zu System.Threading.Thread.CurrentThread von .Net in Delphi32 gibt. Habe bis jetzt leider nichts brauchbares mit Google und anderen Suchmaschinen gefunden, brauche diese Funktion aber sehr dringend. Hoffe ihr könnt mir da weiterhelfen. Danke. |
Re: CurrentThread in Delphi
getcurrentthread aus der WINApi vielleicht?
(oder getcurrentthreadid) Ich weis allerdings nicht, was das in .Net ist. |
Re: CurrentThread in Delphi
Ja GetCurrentThread ist gar nicht mal so schlecht,
jetzt müsste ich damit nur noch das dazu passende TThread Objekt in Delphi finden. System.Threading.Thread.CurrentThread gibt dir in .Net das im Moment laufenden Thread als Objekt zurück. |
Re: CurrentThread in Delphi
Deine eigenen Threads in eine Objektliste packen und entsprechend auch wieder herausnehmen wennd er Thread ausläuft. Danach kannst du nach
![]() ![]() |
Re: CurrentThread in Delphi
Das geht leider nicht, da ich die Threads nicht erstelle sondern eine Fremdkomponente,
und diese auch keine Liste mit Threads anbietet. Aber trotzdem danke. |
Re: CurrentThread in Delphi
Dann ist die Frage, warum du denn die Instanzen brauchst? Durch das Thread-Handle von GetCurrentThread kannst du alle Steuerungsaufgaben auch durch die entsprechende WinAPI durchführen...
|
Re: CurrentThread in Delphi
das ThreadHandle ist das einzige worauf du bauen kannst. Denn wenn der Thread per Api erstellt wurde gibt es kein ThreadObject.
|
Re: CurrentThread in Delphi
Schade das habe ich schon fast befürchtet,
aber trotzdem Danke an alle für die schnelle Unterstützung. |
Re: CurrentThread in Delphi
@Muetze1
Eigentlich wollte ich das Synchronize vom TThread ausführen, habe aber dann bemerkt dass das Synchronize im Prinzip nichts anderes macht als EnterCriticalSection und LeaveCriticalSection. Daher hilft mir das auch nicht wirklich weiter. Mein Problem ist dass das EnterCriticalSection und LeaveCriticalSection alles viel langsamer laufen lässt, auch wenn ich nur einen Thread habe der darauf zugreiffen kann, dauert dies mehr als doppelt so lang. |
Re: CurrentThread in Delphi
Wie oft rufst du die Enter/Leave-Pärchen denn auf?
|
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 |
Re: CurrentThread in Delphi
Hi Stahli,
musste erst nochmal nach schauen ^^ (ist halt doch schon etwas länger her). Bei mir war damals das Problem das der FastReport - Webserver, wenn zwei oder mehr Reports gleichzeitig bearbeitet wurden und wir die Standard Connection nutzten dieser nicht Multi-Threading fähig war. Also habe ich den FastReport eine neue Datenbankverbindung programmiert die dies beherrscht. (soweit ich mich jetzt zurück erinnern kann). Also habe das Problem leider ganz anders gelöst. aber wenn du dein Problem genauer beschreibst kann ich versuchen dir zu helfen. (evtl. neues Thread-Thema öffnen?) was auch noch wichtig ist, erstellst du die Threads? oder eine Fremdkomponente? Arbeitest du mit Delphi.Net? oder Win32? |
Re: CurrentThread in Delphi
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 05:59 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