![]() |
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. |
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... |
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: |
Re: threadvars aus anderen Threads auslesen
Zitat:
|
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. |
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 |
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 01:19 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