![]() |
Re: Exception bei Thread-Verwendung
Jetzt wollte ich das gerade umsetzen, da bin ich an ein weiteres Problem gestoßen: Ich muss auch aus anderen Prozeduren auf den IdHTTP zugreifen, etwa um ihn per Buttonclick zu stoppen. Das geht also leider nicht :(
|
Re: Exception bei Thread-Verwendung
Natürlich geht das. Dazu musst du nur den Zugriff (threadsicher!) auf die HTTP-Komponente über den Thread implementieren.
|
Re: Exception bei Thread-Verwendung
Berühmte Frage ;-) : Wie?
|
Re: Exception bei Thread-Verwendung
Hi,
Schon mal was von ![]() Oder du benutzt einen Flag und lässt den Thread die Arbeit tun. |
Re: Exception bei Thread-Verwendung
bisher noch nicht, hab grad mal geschaut... uff, das ist ein sehr umfangreiches Thema.
Das mit CriticalSection hab ich nicht wirklich verstanden. Dafür habe ich stattdessen die Komponente (IdThreadComponent) entfernt und den Thread selbst erzeugt. Wenn ich, wie hier gelesen, das ganze synchronisiert mache, gestaltet sich der Ablauf so, als ob es gar keinen Thread gäbe (Programm reagiert nicht oder selten). Wenn ich den eigenen Thread unsynchronisiert laufen lasse, reagiert das Programm problemlos: Die Progressbars erden aktualisiert, Klicks angenommen. Nur am Ende wieder die Exception mit dem Handle :( Das Problem bei der Sache ist, dass die Progressbars etc. im onWork des IdHTTP aktualisiert werden, ich kann also nicht einfach die ganze Komponente in denThread verschieben. |
Re: Exception bei Thread-Verwendung
Versuch mal die Komponente Dynamisch im Thread zu erzeugen, zunächst mal ohne Progress usw. wenn das soweit geht kannst dun nach und nach die Visualisierung einbauen.
Was das hängen betrifft, wenn du z.B: IDHttp.Get syncronisierst kannst du dir den Thread auch gleich schenken. Zeig mal ein bischen relevanten Code |
Re: Exception bei Thread-Verwendung
Hmm also wenn ich die Progressbars ausbaue, dann können sie nicht mehr stocken, und das Problem ist natürlich gelöst ;)
Wie oben geschrieben, die einzige Zeile Code, sie aber eben das ganze Prog aufhält, ist IdHTTP.Post. Die Aktualisierung mache ich im onWork, deshalb wäre die dynamische Erzeugung eigentlich nutzlos, da der Zugriff auf die VCL ja bleibt. Übrigens wäre auch eine Aktualisierung per Timer nutzlos, da das Timer-Event nicht wie eingestellt kommt, sondern nur, wenn onWork ausgeführt wird und darin ProcessMessages steht. Wie kann ich denn Post synchronisieren? Bzw. durch das Synchronisieren hängt alles erst ja. |
Re: Exception bei Thread-Verwendung
Hallo,
synchronisiere nicht post. verarbeite im thread das OnWork-Event und Synchronisiere dann ein Event, das du nach außen reichst. |
Re: Exception bei Thread-Verwendung
Zitat:
|
Re: Exception bei Thread-Verwendung
Ich mach mal ein Pseudocode Beispiel.
Delphi-Quellcode:
Ich hoffe jetzt wird es klar was wir meine (ich hoffe DGL-Luke hat das auch so ähnlich gemeint)
procedure MyOnWorkEvent(...);
begin ... Syncronize(MyGUIUpdate); ... end; procedure MyGUIUpdate; begin ... Progressbar.Position := MyProgress; ... end; |
Alle Zeitangaben in WEZ +1. Es ist jetzt 11:56 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