Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Netzwerke (https://www.delphipraxis.net/14-netzwerke/)
-   -   Delphi TIdFTP.Connect aus Thread heraus ergibt AV (https://www.delphipraxis.net/69391-tidftp-connect-aus-thread-heraus-ergibt-av.html)

Delphi-Freak 14. Mai 2006 19:27


TIdFTP.Connect aus Thread heraus ergibt AV
 
Ich möchte, damit mir das Fenster nicht einfriert, alle Kommunikation mit dem FTP Server über einen Thread laufen lassen. (Habe dazu auch hier einige Fragen gestellt.) Ich habe also eine Komponente gebastelt, man könnte es so veranschaulichen:
Code:
TFTPClient (von TObject abgeleitete Klasse)
|- public TIdFTPEx (von TIdFTP abgeleitete Klasse)
|- private TFTPThread (von TThread abgeleitete Klasse)
In meinem Form habe ich ein Feld vom Typ TFTPClient, dort drinnen eine Methode Connect, welche wiederum an TFTPThread eine Message schickt, er solle die Connect Methode von TIdFTPEx aufrufen. Im der Execute-Methode vom Thread habe ich dann ein while GetMessage-Konstrukt und rufe somit ggfs. aus dem Thread heraus TIdFTPEx.Connect auf. Soweit funktioniert es auch, nur beim inherited Connect von TIdFTPEx gibt es dann eine AV (beim Schreiben von Adresse ...).
Was habe ich dabei falsch gemacht, bzw. spuckt die Connect-Methode von den Indys die AV aus, oder kann er sie gar nicht erst "finden" bzw. aufrufen und spuckt deshalb schon die AV aus?
Danke schon mal für eure Hilfen!

LG, ich

@Mods: Ich hoffe es ist hier das richtige Forum, sonst bitte verschieben...

Edit: Habe mich irgendwie vertan, wenn ich die Methode direkt aus dem Form aufrufe (also TFTPClient.TIdFTPEx.Connect), dann gibt es eine AV, via Thread bleibt dieser bei Connect nur hängen (mittels Windows.Beep ausgetestet).

Stefan Hueg 16. Mai 2006 02:42

Re: TIdFTP.Connect aus Thread heraus ergibt AV
 
Für Indy gibt es die Komponente "TIdAntiFreeze". Hier die Beschreibung aus der Borland Help:

Zitat:

Indy works on the blocking model. That is... when calls are made to Indy, they do not return until they are complete. If calls are made in the main thread, this will cause the Application User Interface to "freeze" during Indy calls. TIdAntiFreeze counteracts this effect. TIdAntiFreeze allows Indy to process Application messages so that Windows messages continue to be executed while Indy blocking socket calls are in effect.

Only one TIdAntiFreeze can be active in an application
Vielleicht hilft dir das ja

Delphi-Freak 16. Mai 2006 13:03

Re: TIdFTP.Connect aus Thread heraus ergibt AV
 
Danke mal, wäre auf jeden Fall eine Lösung; Nachteil ist halt auch (soweit ich das verstanden habe), dass nur alle soundsoviel Millisekunden die Messages abgearbeitet werden, aber eben nicht in einem anderen Thread gearbeitet wird.
Beim Ausprobieren hab ich mir jetzt eine neue Kompo von TIdFTPEx abgeleitet, darin Client auf Self gesetzt, um im Code sonst nicht viel umschreiben zu müssen. Siehe da, ich rufe das Ganze normal auf (ohne Thread-Umweg!!!), und es gibt trotzdem eine AV, das Problem dürfte also nicht am Thread liegen...

LG, ich


Edit: Irgendwie voll komisch, aber ich habe - keine Ahnung wann und wieso :gruebel: - in TIdFTPEx.Create das inherited Create vergessen, dann kann es auch nicht funktionieren...
Aber trotzdem danke!

LG, ich


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