Delphi-PRAXiS
Seite 2 von 4     12 34      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Exception bei Thread-Verwendung (https://www.delphipraxis.net/94007-exception-bei-thread-verwendung.html)

ManuMF 15. Jun 2007 17:30

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 :(

alzaimar 15. Jun 2007 17:43

Re: Exception bei Thread-Verwendung
 
Natürlich geht das. Dazu musst du nur den Zugriff (threadsicher!) auf die HTTP-Komponente über den Thread implementieren.

ManuMF 15. Jun 2007 17:51

Re: Exception bei Thread-Verwendung
 
Berühmte Frage ;-) : Wie?

C.Schoch 16. Jun 2007 12:14

Re: Exception bei Thread-Verwendung
 
Hi,
Schon mal was von Hier im Forum suchenCritical Section gehört?
Oder du benutzt einen Flag und lässt den Thread die Arbeit tun.

ManuMF 16. Jun 2007 13:31

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.

C.Schoch 16. Jun 2007 14:16

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

ManuMF 16. Jun 2007 14:31

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.

DGL-luke 16. Jun 2007 14:37

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.

ManuMF 16. Jun 2007 14:38

Re: Exception bei Thread-Verwendung
 
Zitat:

Zitat von DGL-luke
verarbeite im thread das OnWork-Event

wie das? bzw. wie weiß ich, wann ich das synchronisierte Event ausführen soll?

C.Schoch 17. Jun 2007 03:04

Re: Exception bei Thread-Verwendung
 
Ich mach mal ein Pseudocode Beispiel.

Delphi-Quellcode:
procedure MyOnWorkEvent(...);
begin
...
Syncronize(MyGUIUpdate);
...
end;

procedure MyGUIUpdate;
begin
...
Progressbar.Position := MyProgress;
...
end;
Ich hoffe jetzt wird es klar was wir meine (ich hoffe DGL-Luke hat das auch so ähnlich gemeint)


Alle Zeitangaben in WEZ +1. Es ist jetzt 11:56 Uhr.
Seite 2 von 4     12 34      

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