![]() |
Re: Thread von "aussen" abbrechen
Zitat:
Zeig doch mal den Source, und Abhängigkeiten von Globalen Variablen (Objektvariablen nicht vergessen). lg. Astat |
Re: Thread von "aussen" abbrechen
Hi,
hat sich erledigt. Ich habe den übeltäter gestern durch reinen zufall gefunden. Beim IdFTP.Disconnect passiert das. Da wurde einfach ein "quit" an den server geschickt. Egal in welchem "zustand" der server war. Der effekt war dann, das der Thread einfach komplett verlassen wurde. Obwohl ich das Disconnect mit try und except abfange, ist er da nichtmehr wiedergekommen. Einfach ein try an die stelle (siehe unten) rein und gut war. Das problem war halt, das es so selten auftritt. Aber es gibt halt sachen die nicht sauber abgefangen werden. Ob es nochmehr gibt weiss ich nicht. Das es am IdFTP liegt hatte ich schon beim erstenmal in verdacht. Aber nicht richtig gesucht. Der vollständigkeitshalber hier die stelle im IdFTP.pas.
Delphi-Quellcode:
Vielen dank an alle die geholfen haben.....
procedure TIdFTP.DisconnectNotifyPeer;
begin if IOHandler.Connected then begin IOHandler.WriteLn('QUIT'); {do not localize} <-- hier tritt dann der fehler auf. IOHandler.CheckForDataOnSource(100); if not IOHandler.InputBufferIsEmpty then begin GetInternalResponse; end; end; end; |
Re: Thread von "aussen" abbrechen
Dennoch ist ein Watchdog für Systeme die immer hochverfügbar sein müssen nicht schlecht. Denn jeder macht mal Fehler!
|
Re: Thread von "aussen" abbrechen
Zitat:
Die Watchdog kommt trotzdem rein. Hatte ich auch geschrieben, aber ist beim editieren verloren gegangen :oops: |
Re: Thread von "aussen" abbrechen
Liste der Anhänge anzeigen (Anzahl: 1)
Nachtrag:
Besser spät als nie. Angehängt ist ein testprogram wo man(n) wie es geht. Gruss |
Re: Thread von "aussen" abbrechen
Man beendet keine Threads von außen, sondern man signalisiert ihnen nur von außen, dass sie sich beenden sollen. Wenn du einen Thread von außen beendest, also abschießt, dann kann es passieren, dass die vom Thread belegten Ressourcen in einem inkonsistenten Zustand sind; was natürlich auch folgen für andere Threads haben kann, welche diese Ressourcen nutzen. Also signalisiere dem Thread, dass er sich beenden soll und der Thread kann sich dann kontrolliert selber beenden.
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 01: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 by Thomas Breitkreuz