AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren

Thread von "aussen" abbrechen

Ein Thema von DelTurbo · begonnen am 28. Feb 2010 · letzter Beitrag vom 23. Mai 2010
Antwort Antwort
Seite 2 von 2     12
Astat

Registriert seit: 2. Dez 2009
Ort: München
320 Beiträge
 
Lazarus
 
#11

Re: Thread von "aussen" abbrechen

  Alt 1. Mär 2010, 19:48
Zitat von DelTurbo:
Zitat von Fridolin Walther:
Generell wäre der bessere Weg aber die Ursache zu finden, wieso Threads "stehen bleiben".
Hallo DelTurbo, wie @Fridolin Walther schon schrieb, wird der Sündenbock im Execute liegen.
Zeig doch mal den Source, und Abhängigkeiten von Globalen Variablen (Objektvariablen nicht vergessen).

lg. Astat
Lanthan Astat
06810110811210410503210511511603209711003210010110 9032084097103
03211611111604403209711003210010110903210010510103 2108101116122
11610103209010110510810103206711110010103210511003 2068101108112
10410503210310111509910411410510109810111003211910 5114100046
  Mit Zitat antworten Zitat
DelTurbo

Registriert seit: 12. Dez 2009
Ort: Troisdorf
1.171 Beiträge
 
Delphi 2007 Architect
 
#12

Re: Thread von "aussen" abbrechen

  Alt 2. Mär 2010, 11:17
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:
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;
Vielen dank an alle die geholfen haben.....
Alle meine Rechtschreibfehler sind Urheberrechtlich geschützt!!
  Mit Zitat antworten Zitat
QuickAndDirty

Registriert seit: 13. Jan 2004
Ort: Hamm(Westf)
1.882 Beiträge
 
Delphi 12 Athens
 
#13

Re: Thread von "aussen" abbrechen

  Alt 2. Mär 2010, 12:58
Dennoch ist ein Watchdog für Systeme die immer hochverfügbar sein müssen nicht schlecht. Denn jeder macht mal Fehler!
Andreas
Monads? Wtf are Monads?
  Mit Zitat antworten Zitat
DelTurbo

Registriert seit: 12. Dez 2009
Ort: Troisdorf
1.171 Beiträge
 
Delphi 2007 Architect
 
#14

Re: Thread von "aussen" abbrechen

  Alt 2. Mär 2010, 13:03
Zitat von QuickAndDirty:
Dennoch ist ein Watchdog für Systeme die immer hochverfügbar sein müssen nicht schlecht. Denn jeder macht mal Fehler!
Das ist vollkommen richtig. Zumal das teil einfach auf nem rechner läuft wo nur ein Strom und ein Netzwerkabel reingeht. Kein Monitor, keine Maus... usw.

Die Watchdog kommt trotzdem rein. Hatte ich auch geschrieben, aber ist beim editieren verloren gegangen
Alle meine Rechtschreibfehler sind Urheberrechtlich geschützt!!
  Mit Zitat antworten Zitat
DelTurbo

Registriert seit: 12. Dez 2009
Ort: Troisdorf
1.171 Beiträge
 
Delphi 2007 Architect
 
#15

Re: Thread von "aussen" abbrechen

  Alt 23. Mai 2010, 13:21
Nachtrag:

Besser spät als nie. Angehängt ist ein testprogram wo man(n) wie es geht.

Gruss
Angehängte Dateien
Dateityp: zip threadtest_213.zip (7,3 KB, 12x aufgerufen)
Alle meine Rechtschreibfehler sind Urheberrechtlich geschützt!!
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#16

Re: Thread von "aussen" abbrechen

  Alt 23. Mai 2010, 13:32
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.
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

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 11:26 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