AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Netzwerke Delphi OnDisconnect wird aufgerufen, funktioniert aber nicht immer!
Thema durchsuchen
Ansicht
Themen-Optionen

OnDisconnect wird aufgerufen, funktioniert aber nicht immer!

Offene Frage von "---Bernhard---"
Ein Thema von ---Bernhard--- · begonnen am 24. Aug 2005 · letzter Beitrag vom 24. Aug 2005
Antwort Antwort
Benutzerbild von ---Bernhard---
---Bernhard---

Registriert seit: 26. Dez 2003
Ort: Abensberg
111 Beiträge
 
Delphi 2006 Professional
 
#1

OnDisconnect wird aufgerufen, funktioniert aber nicht immer!

  Alt 24. Aug 2005, 12:10
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:
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.
So, für das bessere Verständnis noch etwas Code:
Delphi-Quellcode:
//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;
Ich kann echt nicht verstehen, dass das Einfügen so herlich funktioniert, es sei denn die Verbindung wird nicht richtig getrennt.
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---
Bernhard Doll
Das Leben ist ein sch*** Spiel... aber eine super Grafik!!
http://www.doll-online.net
  Mit Zitat antworten Zitat
Benutzerbild von mischerr
mischerr

Registriert seit: 6. Feb 2004
Ort: Konz
238 Beiträge
 
Delphi 12 Athens
 
#2

Re: OnDisconnect wird aufgerufen, funktioniert aber nicht im

  Alt 24. Aug 2005, 21:17
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
  Mit Zitat antworten Zitat
Benutzerbild von ---Bernhard---
---Bernhard---

Registriert seit: 26. Dez 2003
Ort: Abensberg
111 Beiträge
 
Delphi 2006 Professional
 
#3

Re: OnDisconnect wird aufgerufen, funktioniert aber nicht im

  Alt 24. Aug 2005, 21:38
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...
Bernhard Doll
Das Leben ist ein sch*** Spiel... aber eine super Grafik!!
http://www.doll-online.net
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 21:19 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