![]() |
OnDisconnect wird aufgerufen, funktioniert aber nicht immer!
Hallo
Ich bin dabei eine Server-Client Anwendung zu schreiben (Indy, TCP). Bis jetzt funktioniert alles auch ganz gut, bis auf diesen (kleinen), imho sehr seltsamen Fehler: In meinem Client habe ich u.A. die Komponenten TIdTCPClient (Indy) und TJvRichEdit (Jedi). Das JvRichedit dient als Log. Am Anfang jeder Zeile setzte ich ein kleine Grafik, damit es etwas übersichtlicher wird. So, nun zum Problempunkt: Im OnDisconnected des Clients soll er im JvRichEdit festhalten, dass die Verbindung getrennt wurde. Dies funktioniert prima, jedoch wenn die Verbindung vom Server beendet wird, wird die "OnDisconnected" ausgeführt, es kommt aber beim Einfügen des Image vom Debugger folgende Fehlermeldung:
Delphi-Quellcode:
So, für das bessere Verständnis noch etwas Code:
Benachrichtigung über Debugger-Exception
--------------------------- Im Projekt Client.exe ist eine Exception der Klasse EOleSysError aufgetreten. Meldung: 'CoInitialize wurde nicht aufgerufen'. Prozess wurde angehalten. Mit Einzelne Anweisung oder Start fortsetzen.
Delphi-Quellcode:
Ich kann echt nicht verstehen, dass das Einfügen so herlich funktioniert, es sei denn die Verbindung wird nicht richtig getrennt.
//CLIENT
procedure TForm1.ClientDisconnected(Sender: TObject); var Bitmap: TBitmap; begin Bitmap := TBitmap.Create; try ImageList.GetBitmap(1, Bitmap); try // Hier der Fehler: Funktioniert korrekt, es sei den die Verbindung // wird _vom Server_ nicht "sauber" beendet!! form1.JvRichEdit1.InsertGraphic(Bitmap, False); // <- Der Fehler! finally form1.JvRichEdit1.Lines.Add('Verbinung getrennt'); //Geht IMMER !! end; finally Bitmap.Free; end; end; //SERVER //Ich benutze diesen Code zum Trennen der Clients with Clients.LockList do try for i := 0 to Count-1 do begin Client := Items[i]; ClientThread := Client.Thread; ClientThread .Connection.Disconnect; Application.ProcessMessages; end; finally Clients.UnlockList; end; Anscheinend wird in Indy eine Exception durch das unsaubere Trennen ausgelöst, intern verarbeitet und dann das OnDisconnected ausgeführt, jedoch durch die Exception irgendwas nicht initalisiert. Aber warum weiß ich auch nicht, den Indy hat ja nichts mit den Jedis zutun, etc. ... Ich bin ratlos :? Hoffentlich kann mir jemand helfen! ---Bernhard--- |
Re: OnDisconnect wird aufgerufen, funktioniert aber nicht im
Ich würde mir via PostMessage aus dem OnDisconnect (im Thread-Kontext?) heraus eine Message ans Formular schicken und dann dort den Eintrag tätigen.
Gruss, Michael |
Re: OnDisconnect wird aufgerufen, funktioniert aber nicht im
Danke für die Antwort. Ich hab das Problem derzeit mit nem Timer gelöst, dann wird auch eine Meldung ausgelöst, falls OnDisconnected gar nicht auftritt.
Das mit den PostMessages wrd ich mir uach nochmal anschaun, hab mich damit so gut wie noch gar nicht befasst. Aber warum bzw. wie das Problem auftritt würde mich auch interessieren... |
Alle Zeitangaben in WEZ +1. Es ist jetzt 10:46 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