AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Netzwerke Delphi Problem mit TIdTCPServer, kein sauberes Beenden möglich
Thema durchsuchen
Ansicht
Themen-Optionen

Problem mit TIdTCPServer, kein sauberes Beenden möglich

Ein Thema von Tigger · begonnen am 18. Mär 2005 · letzter Beitrag vom 14. Okt 2005
 
Benutzerbild von Tigger
Tigger

Registriert seit: 22. Sep 2004
Ort: Wedel
25 Beiträge
 
Delphi 7 Enterprise
 
#1

Problem mit TIdTCPServer, kein sauberes Beenden möglich

  Alt 18. Mär 2005, 15:06
Hallo zusammen!
Ich sitze immer noch an meinem Schiffe-versenken. Habe das Problem, dass sich das Programm nicht sauber beenden läßt.
Ich arbeite mit den Indy-Komponenten, im speziellen geht es hier um den TIdTCPServer.

Wenn der Client die Verbindung unterbricht, wird folgende Prozedur ausgeführt:
Delphi-Quellcode:
procedure Tfrm_main.TCP_ServerDisconnect(AThread: TIdPeerThread);
//******************************************************************************
//Prozedur OnDisconnect. Wird ausgeloest, wenn der Client vom Server getrennt wird
//------------------------------------------------------------------------------
// Schnittstelle
// IN: AThread - TIdPeerThread - Der Thread der Disconnect ausloest
//******************************************************************************
var ThreadList:TList;
begin
    if verbindungSteht then
    begin
       // Verbindung trennen
       sendeSysLog('Verbindung unterbrochen');
       AThread.Connection.Disconnect;
       Statusbar1.Panels[0].Text:= 'Die Verbindung zum Client wurde verloren... (On Disconnect)';
       unterbrochen:= true;
       verbindungSteht:= false;
       PingThread.Suspend;
       TCP_Server.Active := false;
    end;
end;
Beim Deaktivieren des TCP-Servers dauert es einen Moment, dann kommt eine Exception "EIdTerminateThreadTimeout
'Zeitüberschreitung bei Beenden von Thread' ".

Wenn ich den Server schliesse, folgende Prozedur:
Delphi-Quellcode:
procedure Tfrm_main.FormClose(Sender: TObject; var Action: TCloseAction);
//******************************************************************************
// Formular wird geschlossen
//******************************************************************************
var ThreadList:TList;
begin
    sendeSyslog('Formular wird geschlossen');

    try
      if TCP_Server.Active then
        TCP_Server.Active := false;
      if PingThread <> nil then
        PingThread.Terminate;
      ServerSocket.Active := false;
      TCP_Server.ThreadMgr.TerminateThreads;
      SysLog.Active := false;
    except //einfach nur abfangen
    end;

    verbindungSteht:= false;
end; //FormClose
Danach tritt sofort folgende Exception auf: "EIdClosedSocket 'Verbindung aufgehoben' ".

Wenn ich breakpoints setze, wird die Exception wie gesagt immer beim Deaktivieren des TCP-Servers ausgelöst. Nehme ich diese Code-Teile komplett aus dem Programm raus, tritt trotzdem die Exception mit 'Verbindung aufgehoben' auf und zwar beim Beenden des Programms, also direkt nach dem Application.run bei "end.".

Hat jemand so auf Anhieb eine Idee, wo der Hund begraben ist?

Gruß, Tigger
  Mit Zitat antworten Zitat
 


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 18:47 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