Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi threadvars aus anderen Threads auslesen (https://www.delphipraxis.net/98084-threadvars-aus-anderen-threads-auslesen.html)

SubData 21. Aug 2007 08:14


threadvars aus anderen Threads auslesen
 
Moin.

Ich bin auf der Suche nach einer Möglichkeit an die mit threadvar global deklarierten Variablen aus fremden Threads zuzugreifen.
Die Threads laufen asyncron und werden über die Indy Komponenten gesteuert. Zugriff auf die Threads hab ich soweit nur über die ThreadList der Indys. Den Zugriff auf die einzelnen Variablen brauche ich über den Hauptthread.

Jemand ne Idee? :)

Achja: Das Ganze ist ein HTTP Gerüst, ich kann daher nicht beigehen und in jedem Thread die Variablen irgendwohin dumpen oder in einen globalen Container schieben. Es müsste also schon ein direkter Zugriff auf die Variablen sein ohne diese in jedem Thread ständig zwischenzuspeichern.

OlafSt 21. Aug 2007 12:23

Re: threadvars aus anderen Threads auslesen
 
Das ist wider die Idee von threadvars... Die sollen global innerhalb eines Threads, aber unsichtbar in allen anderen Threads sein.

Dir bleibt also nichts anderes übrig, als keine threadvars zu verwenden - oder das, was dich interessiert, per property o.ä. zugreifbar zu machen. Das sowas in Threads zu bösen und vor allem extrem schwer auffindbaren Fehlern führen kann, muß ich nicht gesondert erwähnen, oder...

SubData 21. Aug 2007 12:30

Re: threadvars aus anderen Threads auslesen
 
Es geht hier um einen HTTP Server, der pro Request sinnigerweise einen neuen Thread erstellt.
Da ich nun aber keine Lust habe jedesmal die Request und Response Parameter durch sämtliche Klassen / Prozeduren durchzuschleifen werden alle wirklich wichtigen Informationen (HTTP-Session etc) in ThreadVars ausgelagert.

Selbst wenn ich es über Propertys machen wollen würde... Wie komm ich dann an die Propertys der einzelnen Threads? :gruebel:

OlafSt 21. Aug 2007 12:44

Re: threadvars aus anderen Threads auslesen
 
Zitat:

Zugriff auf die Threads hab ich soweit nur über die ThreadList der Indys.
Damit kommst du an die Threads heran - und somit auch an die properties (oder wie auch immer du das letztlich lösen willst). Dir ist sicher bekannt, das man dem Indy-HTTP-Server sagen kann, welche ART von Thread er erstellen soll...

SubData 21. Aug 2007 13:15

Re: threadvars aus anderen Threads auslesen
 
Was meinst du mit "welche Art" ?

Ich komm damit zwar an die Threads aber nicht an irgendwelche Instanzen der Klassen in den Threads.

Änderungen an den Indy Quellcodes sind ausgeschlossen.

OlafSt 21. Aug 2007 13:58

Re: threadvars aus anderen Threads auslesen
 
Also kaue ich das ganze vor...

TIdHTTPServer verwendet Threads, um die Connections zu verwalten. Diese sind vom Typ TIdThread.

Niemand hält dich davon ab, von TIdThread eine neue Klasse abzuleiten und darin all die Properties zu verewigen, die du brauchst.

Nun kann man dem TIdHTTPServer in seinem property ThreadClass mitgeben, welche Sorte von TIdThreads er verwenden soll. Da gibts du ihm einfach mit, das er zukünftig DEINE Thread-Klasse benutzen soll.

Und siehe da - du kommst an die Liste der laufenden Threads ran, du weißt, was für Klassen sich dahinter verbergen (nämliche deine Thread-Klasse, kannst es also notfalls auch typecasten) und hast dann Zugriff auf deine gesuchten Infos.

Fertig ist der Lack.

Kleine Einschränkung: Funktioniert nur mit Indy 9. Bei Indy 10 habe ich solche Verrenkungen noch nicht versucht, aber TIdContext wäre eine Anlaufstelle für die OH.

Olaf

SubData 22. Aug 2007 07:35

Re: threadvars aus anderen Threads auslesen
 
Mir bleibt wohl nichts anderes übrig, als auf die Art und Weise zu arbeiten, auch wenn ich lieber direkt an die ThreadVars möchte.

Meinetwegen auch mit dreckigen Tricks :zwinker:


Alle Zeitangaben in WEZ +1. Es ist jetzt 23:10 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